基于 Neo4j 与 py2neo 的 Mac 知识图谱搭建实战
在 macOS 环境下使用 Neo4j 图数据库和 py2neo 库搭建知识图谱的完整流程。内容包括 Neo4j 的安装配置、Cypher 语言的基本增删改查操作演示、数据预处理(清洗与建模)、以及利用 Python 连接数据库构建图谱的核心逻辑。通过麦当劳业务场景示例,展示了如何定义节点、属性及关系,帮助读者掌握图数据库的基础应用。

在 macOS 环境下使用 Neo4j 图数据库和 py2neo 库搭建知识图谱的完整流程。内容包括 Neo4j 的安装配置、Cypher 语言的基本增删改查操作演示、数据预处理(清洗与建模)、以及利用 Python 连接数据库构建图谱的核心逻辑。通过麦当劳业务场景示例,展示了如何定义节点、属性及关系,帮助读者掌握图数据库的基础应用。

Neo4j 是一个高性能的、原生的图数据库。它不采用传统的行和列的表格结构,而是使用节点和关系的图结构来存储和管理数据。

安装了 Homebrew 后,直接在终端输入以下命令即可:
brew install neo4j
安装后,Neo4j 浏览器可通过 http://localhost:7474 访问。
neo4j://localhost:7687neo4jneo4j首次连接成功后,系统会强制要求修改默认密码。设置一个新的安全密码并记住。
测试连接:连接成功后,在顶部的命令行中输入 Cypher 查询语句,例如:
RETURN 'Hello World'
接下来我们以【麦当劳】为背景,用 Neo4j 的 Cypher 查询语言演示基本增删改查操作。
建立简单的图谱,包含两种节点和一种关系:
Restaurant
name, address, year_openedProduct
name, price, categorySUPPLIES
since创建节点:
CREATE (r:Restaurant {name: 'McDonalds', address: 'New York'})
CREATE (p:Product {name: 'Burger', price: 10})
创建关系:
MATCH (r:Restaurant {name: 'McDonalds'}), (p:Product {name: 'Burger'})
CREATE (r)-[:SUPPLIES {since: 2020}]->(p)
查找所有餐厅:
MATCH (r:Restaurant) RETURN r
查找特定餐厅供应的所有产品:
MATCH (r:Restaurant {name: 'McDonalds'})-[:SUPPLIES]->(p:Product)
RETURN p.name, p.price
查找供应可乐的所有餐厅:
MATCH (r:Restaurant)-[:SUPPLIES]->(p:Product {name: 'Coke'})
RETURN r.name
多跳查询 - 查找与 MC 销售同类产品的其他餐厅:
MATCH (mc:Restaurant {name: 'McDonalds'})-[:SUPPLIES]->(p:Product)<-[:SUPPLIES]-(other:Restaurant)
RETURN other.name
路径查询 - 查找两家餐厅通过共同产品产生的关联:
MATCH path = (r1:Restaurant)-[:SUPPLIES]->(p:Product)<-[:SUPPLIES]-(r2:Restaurant)
WHERE r1 <> r2
RETURN path
更新节点属性:
MATCH (r:Restaurant {name: 'McDonalds'}) SET r.address = 'Beijing'
新增节点属性:
MATCH (r:Restaurant {name: 'McDonalds'}) SET r.rating = 4.5
更新关系属性:
MATCH (r:Restaurant)-[rel:SUPPLIES]->(p:Product) WHERE r.name = 'McDonalds' AND p.name = 'Burger'
SET rel.since = 2021
删除关系:
MATCH (r:Restaurant)-[rel:SUPPLIES]->(p:Product) WHERE r.name = 'McDonalds' AND p.name = 'Burger'
DELETE rel
删除节点(必须先删除其所有关系):
MATCH (n:Restaurant {name: 'McDonalds'}) DETACH DELETE n
删除所有节点:
MATCH (n) DETACH DELETE n
通过以上例子,可以看到 Neo4j 的操作非常直观:
CREATE/MERGE:对应 SQL 的 INSERT,用于创建节点和关系。MATCH:对应 SQL 的 SELECT ... FROM,是查询的起点,用于定位图形中的模式。WHERE:对应 SQL 的 WHERE,用于过滤结果。SET:对应 SQL 的 UPDATE,用于更新属性。DELETE/DETACH DELETE:对应 SQL 的 DELETE,用于删除元素。Neo4j 的核心优势在于通过 MATCH 子句描述关联模式,这使得查询复杂的关系网络变得简单和高效。
py2neo 是 Python 连接和操作 Neo4j 图数据库的主要工具库,适用于需要处理复杂关系数据的应用场景。
pip install py2neo
数据预处理包括数据清洗、实体识别等步骤,目的是将原始数据转换为适合构建知识图谱的格式。
我们需要从业务角度理解数据,设计出合理的图谱结构。
实体是知识图谱中的【节点】。主要实体类型包括:
属性是描述实体的键值对。例如:
关系是连接实体的边,是图谱价值的体现。
以下是利用 Python 和 py2neo 连接 Neo4j 并构建图谱的示例逻辑,需根据自己的数据集进行修改。
from py2neo import Graph, Node, Relationship
# 连接数据库
graph = Graph("bolt://localhost:7687", auth=("neo4j", "your_password"))
# 创建节点
restaurant_node = Node("Restaurant", name="McDonalds", address="New York")
product_node = Node("Product", name="Burger", price=10)
# 创建关系
relationship = Relationship(restaurant_node, "SUPPLIES", product_node)
# 写入数据库
graph.create(restaurant_node)
graph.create(product_node)
graph.create(relationship)
运行后效果可在 Neo4j Browser 中查看图谱结构。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online