跳到主要内容

工具箱 — Cypher、Neo4j 与两个插件

这一章讲三件事: Cypher 这门查询语言的来头与长相; Neo4j 这个图数据库的安身方式(装本地、跑容器、上云)与两个必备插件; 把本书代码跑起来的完整清单。它是工具章,压轴而非地基—— 前面各章的机制不依赖它,动手复现时才需要它。

1. 先回答一个疑心:这本书是不是被一家厂商绑死了

正文从头到尾都是 Neo4j,附录里作者自己也承认选择 Neo4j 的理由是 「我用它五年多」1。这个坦白值得先接住,再往上看两层:

  • 语言层是开放的。 Cypher 经 openCypher 计划开放了规范, 已被 Amazon、AgensGraph、Katana Graph、Memgraph、RedisGraph、SAP HANA 采用2;ISO 还有一个进行中的 GQL 项目,要做统一的图查询语言, 以 SQL 为底、吸收 Cypher 的已验证设计3——所以学 Cypher 迁移成本有限;
  • 概念层与厂商无关。 节点、关系、属性、向量索引、社区检测—— 前十一章讲的机制没有一条是 Neo4j 专属的。

所以准确的读法是:这本书用一家具体厂商的作品讲了通用机制。 换成别的图数据库,机制照搬,语法重学。

2. Cypher:长得像画图的查询语言

Cypher 是声明式查询语言(说「要什么」,不说「怎么取」), 语法刻意做成 ASCII 画图:圆括号画节点,方括号画关系,箭头画方向4:

MATCH (a:Person)-[:FOLLOWS]->(b:Person)
WHERE a.name = "Alice"
RETURN b.name

人眼扫一遍就能读出意思:「找 Alice 关注的人,返回名字」。 这正是它在 LLM 时代吃香的原因之一——第 05 章的 text2cypher 能成立, 部分前提就是这种语法对语言模型同样友好(这层联系是我们的引申,书里没有明说)。

3. Neo4j 与两个插件:书里真正用到的部件

Neo4j 是原生图数据库:数据以节点和关系存储,两者都是一等公民,都能挂属性(键值对);外部语言经 Cypher 走 HTTP 或 Bolt 二进制协议(程序和数据库之间的通信约定)访问。

它用 Java 实现,支持事务(要么整个成功、要么整个不算数的操作保障)5

书的代码依赖两个插件,分工恰好一头一尾6:

插件是什么本书哪里用
APOC(Awesome Procedures on Cypher)过程与函数大杂烩:数据导入导出、转换、日期、文本处理…第 05 章:读库的元数据、自动推断 schema
GDS(Graph Data Science)图算法库:最短路、PageRank、社区检测、节点嵌入、链接预测第 09 章:跑 Louvain 社区检测

一条隐藏的依赖线值得点破:第 09 章的社区检测是全书唯一必须 GDS 的环节—— 这直接决定了你的部署选项,见下一节。

4. 主走查:从零搭出能跑全书代码的环境

书里的安装指引分散在附录的截图步骤里,这里按决策顺序重排成一条走查。

第 1 步:选部署方式(三条路)7

A. Neo4j Desktop —— 本地图形应用,点几下建库、装插件,适合初次上手
B. Docker —— 一条命令起容器,适合服务器与自动化
C. Aura(云) —— 免运维;但免费版没有 GDS,要跑第 09 章得用 AuraDS(付费档)[^8]

选 B 的话,书里给的完整命令8:

docker run \
-p 7474:7474 -p 7687:7687 \
-d \
-v $HOME/neo4j/data:/data \
-e NEO4J_AUTH=neo4j/password \
-e 'NEO4J_PLUGINS=["apoc", "graph-data-science"]' \
neo4j:5.26.0

三个要点:7474 是 HTTP 端口(Browser 网页)、7687 是 Bolt;数据卷挂到宿主机, 容器删了库还在;环境变量(启动容器时从外面塞进去的设置项)NEO4J_PLUGINS 让两个插件自动装好。 注意书里版本线索不一致:Desktop 步骤要求 5.9.0 以上9, Docker 示例用 5.26.0——照新的走没有错。

第 2 步:装插件(Desktop 路线):选中 DBMS → Plugins 页 → 装 APOC 和 GDS10

第 3 步:关掉一个会骗人的可视化开关。 Browser 默认把结果节点之间的 关系也画出来(哪怕关系不在查询结果里)——初学者会被这张图误导, 以为查出了这些关系。书里明确建议:关掉 Connect Result Nodes11

第 4 步:灌示例数据,验证链路。 Movies 数据集(本书第 05、06、08、11 章 的跑道)三种灌法任选:Browser 里 :play movies 跟着指引点; 或连官方只读演示库;或执行书里的整段 Cypher 清单12。 灌完跑一句 MATCH (m:Movie) RETURN count(m),出数字即环境就绪。

一个诚实的提醒: 附录正文(安装步骤截图、Movies 数据集的几百行 Cypher) 在原书里占了二十多页,信息密度很低——这也是我们把整本书的机制压缩进 前十一章、把附录独立成最后一章的原因。原书附录里只有本节这四个部件 (部署选项、插件、Browser 开关、示例数据)是承重的。

5. 作者的判断与证据

  • 「选 Neo4j 因为我用它五年多」——附录开头作者原话,利益相关如实交代1;
  • 「学 Cypher 是好起点」——因为 openCypher 已被多家采用、GQL 会吸收它3, 这是书里对「投入学这门语言值不值」的正面回答;
  • 版本要求(5.9.0+)与云版 GDS 缺失,是书里给出的两条硬约束139

判断(我们的,不是书里的): 这一章的厂商成分在全书里最浓, 但恰好也最无害——工具章的判断可以低成本复核:跑一遍就知道。 真正要带走的不是「用 Neo4j」,而是**「先看依赖线再选部署」**这个习惯: 列出你的代码要哪些插件(本书 = APOC + GDS),再反查每个部署档位给不给, 答案自然浮出来(本书:云免费档出局)。 如果错,会错在: 如果后续 GDS 的社区检测能力被搬进数据库内核或 云免费档,这条依赖线就断了——但「先查依赖再选型」的方法不受影响。

6. 边界与局限

  • 附录的安装步骤带大量界面截图,版本迭代后截图会过期——以官方文档为准;
  • 书里没有给生产部署的任何建议(集群(多台机器拼成一组来跑)、备份、权限)——这是开发环境指引,不是运维手册;
  • Movies 数据集是玩具:三十来部电影、几十个人,只为让查询有东西可查, 它的规模撑不起任何性能结论;
  • Cypher 的完整语法书里没有教(声明「解释 Cypher 语句超出本书范围」14), 本章也只是给足「能认、能跑」的程度;系统学习要靠官方教程或第 04 章引用的 GQL 规范材料;
  • Bolt 协议、事务配置等底层细节,书里只有一句带过5

7. 可带走的

  1. 机制与厂商分层:节点/关系/向量索引/社区检测是通用的,Neo4j 只是载体;
  2. Cypher 是开放语言:openCypher 六家采用、ISO GQL 以它为蓝本之一,学习投入可迁移;
  3. Cypher 语法像画图——对人友好,对 LLM 也友好(text2cypher 的隐性前提);
  4. 两个插件各管一头:APOC 管 schema 推断,GDS 管社区检测;
  5. 部署三路按依赖反查:全书唯一 GDS 硬依赖在第 09 章,云免费档因此出局;
  6. Docker 一条命令起环境,数据卷和 NEO4J_PLUGINS 是两个不能省的参数;
  7. Browser 的 Connect Result Nodes 会画出结果之外的关系,初学先关掉;
  8. 环境验证的最小闭环:灌 Movies → count 出数 → 才开始跑章节代码。

8. 原文地图

主题原书章原文位置
作者自述选型理由appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:3(搜「five years」)
原生图数据库、节点关系一等公民appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:5(搜「native graph database」) · text/21-apx-appendix-the-neo4j-environment.txt:8(搜「first-class citizens」)
Cypher/Bolt 访问appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:7(搜「Bolt Protocol」)
APOC 插件appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:15(搜「APOC」)
GDS 插件appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:19(搜「Graph Data Science」)
Cypher 声明式、ASCII 画图appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:26(搜「declarative query language」) · text/21-apx-appendix-the-neo4j-environment.txt:29(搜「ASCII-art」)
示例查询appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:33(搜「FOLLOWS」)
openCypher 采用者appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:44(搜「Amazon, AgensGraph」)
ISO GQL、以 SQL 为底appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:46(搜「unified graph query language」) · text/21-apx-appendix-the-neo4j-environment.txt:48(搜「foundation of SQL」)
三种安装方式appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:56(搜「Neo4j Desktop」)
版本 5.9.0+appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:101(搜「5.9.0」)
Docker 命令与插件变量appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:152(搜「docker run」) · text/21-apx-appendix-the-neo4j-environment.txt:157(搜「NEO4J_PLUGINS」)
Aura 免费版无 GDS、要 AuraDSappendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:58(搜「Aura」)
Connect Result Nodes 开关appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:186(搜「Connect Result Nodes」)
Movies 三种灌法appendix—The Neo4j environmenttext/21-apx-appendix-the-neo4j-environment.txt:197(搜「:play movies」) · text/21-apx-appendix-the-neo4j-environment.txt:200(搜「online read-only」)
解释 Cypher 超范围6 Constructing knowledge graphs with LLMstext/15-ch06-6-constructing-knowledge-graphs-with-llms.txt:609(搜「outside the scope」)

Footnotes

  1. 出处:「appendix—The Neo4j environment」第 3 段(text/21-apx-appendix-the-neo4j-environment.txt:3,搜「five years」)。原文:作者 Oskar 自述选 Neo4j 是因为五年多的使用经验。 2

  2. 出处:「appendix—The Neo4j environment」第 44 段(text/21-apx-appendix-the-neo4j-environment.txt:44,搜「Amazon, AgensGraph」)。原文:openCypher 计划把规范开源,促进各厂商实现;迄今 Amazon、AgensGraph、Katana Graph、Memgraph、RedisGraph、SAP HANA 采用。

  3. 出处:「appendix—The Neo4j environment」第 46 段(text/21-apx-appendix-the-neo4j-environment.txt:46,搜「unified graph query language」)与第 48 段(text/21-apx-appendix-the-neo4j-environment.txt:48,搜「foundation of SQL」)。原文:ISO 的 GQL 项目要做统一图查询语言,以 SQL 为底、吸收包括 Cypher 在内的已有图查询语言的验证过的设计;因此学 Cypher 是好起点。 2

  4. 出处:「appendix—The Neo4j environment」第 26 段(text/21-apx-appendix-the-neo4j-environment.txt:26,搜「declarative query language」)与第 29 段(text/21-apx-appendix-the-neo4j-environment.txt:29,搜「ASCII-art」)。

  5. 出处:「appendix—The Neo4j environment」第 5 段(text/21-apx-appendix-the-neo4j-environment.txt:5,搜「native graph database」)与第 8 段(text/21-apx-appendix-the-neo4j-environment.txt:8,搜「first-class citizens」)。原文:Java 实现、经 Cypher 走事务性 HTTP 端点或 Bolt 二进制协议;支持 ACID 事务(第 11 段)。 2

  6. 出处:「appendix—The Neo4j environment」第 15 段(text/21-apx-appendix-the-neo4j-environment.txt:15,搜「APOC」)与第 19 段(text/21-apx-appendix-the-neo4j-environment.txt:19,搜「Graph Data Science」)。具体用途的对应(第 05 章用 APOC、第 09 章用 GDS)依据正文:第 05 章 schema 推断见 text/13-ch04-4-generating-cypher-queries-from-natural-languag.txt:171(搜「APOC」),第 09 章社区检测见 text/17-ch07-02-7-2-graph-indexing.txt:482(搜「Leiden was」)。

  7. 出处:「appendix—The Neo4j environment」第 56 段(text/21-apx-appendix-the-neo4j-environment.txt:56,搜「Neo4j Desktop」)。原文:三种设置方式——Desktop、Docker、Aura。

  8. 出处:「appendix—The Neo4j environment」第 152 段(text/21-apx-appendix-the-neo4j-environment.txt:152,搜「docker run」)与第 157 段(text/21-apx-appendix-the-neo4j-environment.txt:157,搜「NEO4J_PLUGINS」)。原文:挂载数据卷是好习惯,凭据由 NEO4J_AUTH 指定,插件由 NEO4J_PLUGINS 自动加入。

  9. 出处:「appendix—The Neo4j environment」第 101 段(text/21-apx-appendix-the-neo4j-environment.txt:101,搜「5.9.0」)。原文:Desktop 建库时确保选 5.9.0 或更高版本。5.26.0 是书里 Docker 示例的镜像标签(第 158 段)。 2

  10. 出处:「appendix—The Neo4j environment」第 114 段(text/21-apx-appendix-the-neo4j-environment.txt:114,搜「Plugins」)。

  11. 出处:「appendix—The Neo4j environment」第 186 段(text/21-apx-appendix-the-neo4j-environment.txt:186,搜「Connect Result Nodes」)。原文:Browser 会把结果节点之间的关系也画出来,哪怕不在查询结果里;为避免困惑应取消勾选。

  12. 出处:「appendix—The Neo4j environment」第 197 段(text/21-apx-appendix-the-neo4j-environment.txt:197,搜「:play movies」)与第 200 段(text/21-apx-appendix-the-neo4j-environment.txt:200,搜「online read-only」)。第三种是执行书里的 Cypher 清单(第 205 段起)。「count 出数即环境就绪」的验证法是我们的建议,书里未写。

  13. 出处:「appendix—The Neo4j environment」第 58 段(text/21-apx-appendix-the-neo4j-environment.txt:58,搜「Aura」)。原文:Aura 可用于除第 7 章外的所有章节;第 7 章需要 GDS 库,免费版没有,要用支持 GDS 的 AuraDS。

  14. 出处:「6 Constructing knowledge graphs with LLMs」第 609 段(text/15-ch06-6-constructing-knowledge-graphs-with-llms.txt:609,搜「outside the scope」)。原文:解释 Cypher 语句超出本书范围,需要时可以让 LLM 帮忙解释。