知识图谱理论及Neo4j使用

零、知识图谱        

知识图谱(Knowledge Graph)是一种以图结构表示知识的技术,它将现实世界中的实体(如人物、地点、事件等)作为节点,实体之间的关系作为边,构建成“实体—关系—实体”的三元组形式(例如:“麻婆豆腐—是—川菜”),从而系统化地组织和表达人类知识。知识图谱不仅能存储结构化信息,还能通过推理发现隐含关系,广泛应用于搜索引擎、智能问答、推荐系统和人工智能理解任务中。

        常用的知识图谱数据库有Neo4j和Nebula Graph,他们的功能对比如下:

知识图谱数据库对比
Neo4jNebula Graph
架构单机为主,企业版支持分布式原生分布式
数据规模中小规模,十亿级别大规模,最大支持万亿级的边
查询语言CyphernGQL(类似 SQL/Cypher)
云服务支持支持

一、Neo4j安装使用

Neo4j底层依赖java环境,需要先安装java。推荐搭配版本:

java:17+Neo4j:neo4j-community-5.26.0

1、java安装

Linux环境

# linux
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
rpm -ivh jdk-17_linux-x64_bin.rpm

Windows环境

1.下载 https://www.oracle.com/java/technologies/downloads/?er=221886#java17-windows
2.点击安装 jdk-17.0.15_windows-x64_bin.exe
3.设置环境变量 JAVA_HOME  PATH=
# 假设 D:\app\Java 为你的安装路径,添加两个环境变量
JAVA_HOME D:\app\Java\jdk17.0.15
PATH D:\app\Java\jdk17.0.15\bin;D:\app\Java\jdk17.0.15\jre\bin;

验证

java --version

java 17.0.15 2025-04-15 LTS
Java(TM) SE Runtime Environment (build 17.0.15+9-LTS-241)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.15+9-LTS-241, mixed mode, sharing)

2、Neo4j安装

(1)安装

下载安装包:

Neo4j Deployment Center - Graph Database & Analytics

不过官网似乎禁止中国大陆ip访问,无法下载。要么科学上网要么找网盘资源。

Linux安装

 tar -xvf ~/your_path/neo4j-community-4.4.10-unix.tar.gz

windows安装

1. 下载neo4j-community-5.26.0-windows.zip
2. 解压neo4j-community-5.26.0-windows.zip 到某个路径 比如D:\neo4j\
3. 设置环境变量 PATH D:\neo4j\bin
4. 打开cmd启动服务: neo4j install-service.
(2)启动/关闭
neo4j start / stop
(3)修改密码

访问默认端口7474,初始账号密码

# 访问 http://localhost:7474 
# username 'neo4j' and password 'neo4j'

在登陆界面修改密码,涉及到给你注册邮箱发送验证码,但我试过几次都不行,采用下面的办法:

①在安装目录找到conf文件夹下neo4j.conf

②将 #dbms.security.auth_enabled=false 前面的注释取消,相当于免登录

③重启

neo4j stop
neo4j start

④免密登录后,执行查询语句:

ALTER USER neo4j SET PASSWORD 'xxxxx';

⑤恢复密码校验

将neo4j.conf里 dbms.security.auth_enabled=false 这一句重新注释掉,然后重启neo4j

二、查询语句

1、构建数据

(1)创建节点
# 创建一个名字叫张三,性别男的person节点,person为一类节点的标签,p是节点名称,自定义
CREATE (zs:person {name: "张三", sex: "男"})
CREATE (fll:car {name: "法拉利", price: "200万"})
(2)创建关系
# 张三zs从小就喜欢法拉利fll,建立了张三和法拉利之间的关系,可以为这种关系添加更多属性
CREATE (zs) - [:LIKES {since: "从小"}] -> (fll)
(3)创建约束
# 约束car类的节点,其name属性必须唯一
CREATE CONSTRAINT FOR (c:car) REQUIRE (c.name) is UNIQUE
(4)创建索引
# 这里的c类似于sql里的别名,方便后续调用
CREATE INDEX FOR (c:car) ON (c.price)

2、查询

(1)简单查询
# 查询姓名为张三,年纪大于35的person节点,返回其name和age属性
MATCH (p:person {name: "张三"}) where p.age > 35 RETURN p.name, p.age
(2)关联查询
# 查询不喜欢张三喜欢的车的人,比如某个人讨厌法拉利
MATCH (p:person {name: "张三"}) -[:LIKES] -> (c) <- [:HATES] - (o:person) RETURN o.name
(3)深度搜索
# 查询和张三有关联的所有1级(直接)和2级(间接)关系的所有节点
MATCH (p:person {name: "张三"}) - [*1..2] - (anything) RETURN p.name, p.age, anything

3、python接口

pip install pyneo
(1)建立连接
from py2neo import Graph, Node, Relationship

graph = Graph("bolt://localhost:7687", user='neo4j', password='xxx', name='neo4j')
(2)创建节点
person_node = Node("person", name='张三', sex='男')
# 创建节点(不会重复创建),grapg.create会重复创建
graph.merge(person_node, "person", "name")
(3)创建关系
relationship = Relationship(person_node, "LIKES", car_node)
# 补充关系的其他属性           
relationship['since'] = '从小'        
# 关系添加到数据库
graph.create(relationship)
(4)批量创建
# 把所有待创建的节点和关系添加到列表
graph.create(Subgraph(
        company_nodes
        relationships
    ))
(5)查询
# as就是重命名
query = """
MATCH (p:person {name: '张三'}) where p.age>35
RETURN p.name as name, p.age as age
"""

# 执行查询
results = graph.run(query)

neo4j windows和linux的安装包获取

关注同名微信公众号【旅者时光】后,在资源获取栏选择【语言模型】获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值