零、知识图谱
知识图谱(Knowledge Graph)是一种以图结构表示知识的技术,它将现实世界中的实体(如人物、地点、事件等)作为节点,实体之间的关系作为边,构建成“实体—关系—实体”的三元组形式(例如:“麻婆豆腐—是—川菜”),从而系统化地组织和表达人类知识。知识图谱不仅能存储结构化信息,还能通过推理发现隐含关系,广泛应用于搜索引擎、智能问答、推荐系统和人工智能理解任务中。
常用的知识图谱数据库有Neo4j和Nebula Graph,他们的功能对比如下:
Neo4j | Nebula Graph | |
架构 | 单机为主,企业版支持分布式 | 原生分布式 |
数据规模 | 中小规模,十亿级别 | 大规模,最大支持万亿级的边 |
查询语言 | Cypher | nGQL(类似 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的安装包获取:
关注同名微信公众号【旅者时光】后,在资源获取栏选择【语言模型】获取。