越过 CRUD 与导入,Neo4j 的生态插件与 Graph Data Science(GDS,图数据科学库)把能力扩展到图算法、批量 ETL、语义检索与 LLM 知识增强。本文介绍生产中最常用的进阶组件及适用边界。
段末注释:GDS 为 Neo4j Graph Data Science 插件,在内存图投影上运行 PageRank、社区发现等算法;与在线 Cypher 遍历互补。
一、APOC:Cypher 的「标准库扩展」
APOC(Awesome Procedures on Cypher)提供数百个过程(procedure)与函数(function),涵盖导入导出、图重构、文本处理、触发器等。
1.1 安装
Docker:
1 | -e NEO4J_PLUGINS='["apoc"]' |
或手动将 apoc-*.jar 放入 plugins/,并在 neo4j.conf 配置:
1 | dbms.security.procedures.unrestricted=apoc.* |
1.2 常用能力
| 类别 | 示例 |
|---|---|
| 导入导出 | apoc.export.csv.*、apoc.load.json |
| 图重构 | apoc.refactor.mergeNodes |
| 路径 | apoc.path.expandConfig |
| 文本 | apoc.text.regexGroups |
| 定时 | apoc.periodic.iterate、apoc.periodic.commit |
| 元数据 | apoc.meta.graph |
合并重复节点:
1 | MATCH (n:Person) |
1.3 与原生 Cypher 5 的重叠
Neo4j 5 内置了 LOAD CSV ... IN TRANSACTIONS、部分子查询能力,新项目中 APOC 主要用于:JDBC 加载、复杂 refactor、导出、periodic 批处理。
二、Graph Data Science(GDS)
GDS 在内存图投影(graph projection)上运行分析算法,结果写回节点/关系属性或导出。
2.1 安装
1 | -e NEO4J_PLUGINS='["graph-data-science"]' |
验证:
1 | RETURN gds.version(); |
2.2 典型工作流
1 | flowchart LR |
2.3 投影示例
1 | CALL gds.graph.project( |
2.4 常用算法
| 算法 | 用途 | 调用示例 |
|---|---|---|
| PageRank | 节点重要性 | gds.pageRank.write |
| Louvain | 社区发现 | gds.louvain.write |
| WCC | 弱连通分量 | gds.wcc.write |
| Node Similarity | 相似节点 | gds.nodeSimilarity.write |
| Shortest Path | 加权最短路 | gds.shortestPath.dijkstra |
| FastRP | 图嵌入 | gds.fastRP.write |
PageRank 写回:
1 | CALL gds.pageRank.write('ppi-graph', { |
在线查询:
1 | MATCH (p:Protein) |
2.5 释放投影
1 | CALL gds.graph.drop('ppi-graph'); |
大图注意:投影内存 ≈ 子图规模;在专用 analytics 节点或低峰运行。
三、全文与向量检索
3.1 全文索引(内置 Lucene)
1 | CREATE FULLTEXT INDEX doc_search IF NOT EXISTS |
3.2 向量索引 + 语义检索
配合 embedding 模型(OpenAI、本地 sentence-transformers):
1 | // 写入 embedding(1536 维示例) |
四、LLM + 知识图谱(RAG 增强)
1 | flowchart TD |
价值:向量检索找入口节点,Cypher 扩展拉取相关事实三元组,减少 LLM 幻觉(hallucination)。
4.1 LangChain 集成(Python 示意)
1 | from langchain_community.graphs import Neo4jGraph |
4.2 实践建议
| 点 | 建议 |
|---|---|
| Schema 提示 | 把节点标签、关系类型注入 LLM prompt |
| 只读账号 | RAG 查询用 reader 角色 |
| 子图深度 | 限制 1~2 跳,避免上下文爆炸 |
| 事实溯源 | RETURN 节点 id / doi 供引用 |
五、Neo4j Bloom(可视化)
Bloom 是企业版/Aura 的无代码图探索工具:
- 自然语言-ish 搜索(Near natural language search)
- 场景视角(Perspective)预定义标签与关系
- 适合业务人员探索,开发仍用 Browser + Cypher
社区版可用 Browser 图视图替代,功能较简。
六、多数据库与 Fabric(企业版)
| 能力 | 说明 |
|---|---|
| 多数据库 | 同一实例隔离多个图(Neo4j 5 社区版已支持) |
| Fabric | 跨库、跨实例联合查询(企业版) |
Fabric 查询示意:
1 | USE fabric.graph1 |
适用:多租户、历史归档库与热库分离。
七、触发器与变更监听
APOC 触发器(实验性,生产谨慎):
1 | CALL apoc.trigger.add('onPersonCreate', ' |
更可靠的做法:应用层写图或 CDC 出 Kafka,避免数据库内逻辑过重。
八、Neo4j Streams / Kafka
Neo4j Streams 插件(社区/企业)可将节点/关系变更推送到 Kafka,实现 Graph → 事件驱动架构。与 Debezium 反向(SQL → Neo4j)组合,可构建双向同步(复杂度高,需严格幂等设计)。
九、进阶能力选型
| 需求 | 推荐 |
|---|---|
| 批量 ETL、合并节点 | APOC |
| PageRank / 社区发现 | GDS |
| 语义搜索 | 向量索引 + embedding |
| 问答 | LangChain + Cypher QA |
| 业务探索 | Bloom |
| 跨库查询 | Fabric(企业) |
十、小结
- APOC 补 Cypher 工程力;GDS 补图算法——先 project,再 algorithm,再 write 回。
- RAG + 图:向量找入口,Cypher 扩事实,是知识图谱与大模型结合的主流模式。
- 大图算法不要硬写 Cypher;Bloom/Fabric 偏企业场景,社区版用 Browser + 多库即可。
| 下一篇 | 内容 |
|---|---|
| Neo4j-08.局限性与生产实践 | 超级节点、成本、上线清单 |