neo4j的搭建和实例使用

本文介绍Neo4j图数据库的基础知识及应用案例,通过构建苏洵家族的父子继承关系图,展示了CQL语言的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 简介

neo4j是当今最流行的图数据库,基于 节点+关系 的架构,保存了图形数据的基本元素。同时,数据库也支持通过基础数据元素和独特的CQL查询语法,快速方便的检索、构建复杂的图表关系结果。

 

二. 基础知识

windows安装方法: 安装方法

CQL基本语法:基本语法

 

三. 实例

我想构建一个父子继承关系的图表结构,以苏洵苏轼家族为例,先建节点node如下:

create(suxun:Person_{name:"苏洵",age:80,sex:"男"})
create(sushi:Person_{name:"苏轼",age:53,sex:"男"})
create(suzhe:Person_{name:"苏辙",age:51,sex:"男"})
create(suxiaomei:Person_{name:"苏小妹",age:45,sex:"女"})
create(susun:Person_{name:"苏孙",age:29,sex:"男"})
create(suxiaosun:Person_{name:"苏重孙",age:6,sex:"女"})

其中有些节点人名为虚构,为了创建实例方便。  

因为我数据库中先前已有Person标签名做了其他的测试,为避免重复和歧义,本例中标签名起为"Person_"。

对于节点之间的关系,为 :

苏洵-------|------苏轼 --------------苏孙 ---------------苏重孙

                 |------苏辙

                 |------苏小妹

因此创建结构的CQL为:

match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏轼"
create (p1) -[parent:Parent{relation:"父亲"}]-> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏辙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏小妹"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏轼" and p2.name = "苏孙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_{name:"苏孙"}),(p2:Person_{name:"苏重孙"})
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

其中有两种方法: 

  • 第一种用where进行节点筛选,例如 where p1.name="苏洵" and p2.name = "苏轼"
  • 第二种用属性进行节点筛选,例如match(p1:Person_{name:"苏孙"}),(p2:Person_{name:"苏重孙"})

两种方法都可以达到效果

最终结果为:

match(a)-[r:Parent]->(b) return a, r, b

 

使用match进行筛选,并且拼装成树状结构:

1. 筛选出子孙绵延四代的树干

match(a)-[r1:Parent]->(b)-[r2:Parent]->(c)-[r3:Parent]->(d) return a,  b, c, d

 

2. 筛选出存在三代子孙的树干

match(a)-[r1:Parent]->(b)-[r2:Parent]->(c) return a,  b, c

可以发现,查出来的图形虽然是只有一条链路,但其实代表两条数据,各三级节点,如下

那如果要查询某个节点开始的三级结构呢?

 

3. 筛选出某个节点为顶点的三代子孙树干

match(a{name:"苏洵"})-[r1:Parent]->(b)-[r2:Parent]->(c) return a,  b, c

这样就只筛选得到的是以“苏洵”为顶点的三级结构,依次是“苏洵”-->“苏轼”-->“苏孙”

可看到只有一条数据

 

### 如何搭建GraphRAG与Neo4j集成的环境 #### 环境准备 为了成功搭建 GraphRAG 与 Neo4j 的集成环境,需要先完成必要的软件库安装。以下是具体的依赖项以及其作用: - **Python**:作为主要编程语言用于开发部署。 - **Neo4j**:提供图数据库支持,存储节点关系数据并执行复杂查询[^1]。 - **Milvus**:负责向量相似度搜索功能,提升检索效率。 - **Langchain 或其他框架**:简化自然语言处理流程并与上述工具对接。 确保本地机器已安装 Python (建议版本 >=3.8),并通过 pip 安装所需包: ```bash pip install neo4j milvus pymilvus langchain transformers torch faiss-cpu tiktoken openai ``` 对于 Neo4j 数据库服务端,请访问官网下载最新稳定版二进制文件或者 Docker 映像来快速启动实例;而 Milvus 同样推荐采用容器化方式运行以减少配置负担[^2]。 #### 配置连接参数 创建一个新的 Python 文件 `graphrag_neo4j_setup.py` 并初始化如下代码片段设置基本链接属性: ```python from neo4j import GraphDatabase import os NEO4J_URI = "bolt://localhost:7687" NEO4J_USER = "neo4j" NEO4J_PASSWORD = "password" def init_driver(): driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD)) return driver if __name__ == "__main__": driver = init_driver() with driver.session() as session: result = session.run("RETURN 'Connection Successful!' AS message") record = result.single() print(record['message']) ``` 此脚本定义了一个简单的函数用来建立到 Neo4j 实例的安全通道,并验证通信状态正常与否。 接着调整对应变量值匹配实际部署情况下的地址/认证信息即可继续下一步操作。 #### 导入GraphRAG生成的数据至Neo4j 假设已经利用某些方法构建好了基于文本资料的知识表示形式——即所谓的“语义网络”,那么现在就需要把这些结构化的成果迁移到目标平台上去呈现出来供后续分析调用了。 可以借助 Cypher 查询语言编写批量加载命令将外部 JSON 格式的文档映射成本地模式中的实体及其关联边的关系表达式: ```cypher CALL apoc.load.json('file:///path_to_your_data.json') YIELD value MERGE (n:Entity {id:value.id}) ON CREATE SET n += value.properties; WITH collect(value.relations) AS rels UNWIND rels AS r MATCH (a:Entity),(b:Entity) WHERE a.id=r.source AND b.id=r.target MERGE (a)-[:REL_TYPE]->(b); ``` 这里假定输入源遵循特定的标准格式包含字段名如 id、properties 及 relations 列表等描述项目间逻辑联系的内容。 最后重启整个应用程序确认一切运转良好之后就可以享受由强大组合带来的便利啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭Albert

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值