图数据库与查询语言:Cypher、SPARQL 与 Gremlin
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。
一句话定义
图数据库原生以图结构存储与遍历数据:属性图(Neo4j 的 Cypher、Gremlin)把属性直接挂在节点与边上,RDF 三元组库(SPARQL)以 W3C 标准建模语义——RAG 场景主流是属性图 + Cypher,查询语言是与图交互的接口,也是 Text-to-Cypher 的目标语言。
为什么重要
图检索模式(kp-025)最终都要落到一条图查询上;选型(属性图 vs RDF)影响 schema 表达、工具生态与团队技能。对 RAG 工程师而言,能读懂与手写基本 Cypher、理解"查询模式(pattern matching)"思维,是接住 GraphRAG 的入场券。
前置知识
kp-018/019(图模型与 schema)。
核心概念
- 属性图(property graph):节点带标签与属性,边带类型与属性——工程友好,Neo4j、NebulaGraph、Memgraph、AWS Neptune(兼容双模型)均支持。
- RDF 三元组库:主谓宾 + IRIs,OWL 本体、RDFS 推理;SPARQL 查询。学术与开放数据生态强,企业内部工程栈相对重。
- Cypher:声明式模式匹配语言,ASCII 画图语法
(a:Person)-[:WORKS_AT]->(c:Company);Neo4j 主推,也是 LLM 生成查询最常见目标。 - Gremlin:命令式遍历语言(图遍历流水线),Apache TinkerPop 生态。
- 索引与遍历性能:图查询复杂度与"起点选择"强相关——从无索引属性全表扫起会灾难,热点节点(如"中国"关联百万边)需要特殊处理。
原理与机制
模式匹配思维(与 SQL 的最大区别):Cypher 不是描述"怎么算"而是描述"要匹配什么形状"——"找出向华为供货且也向小米供货的公司":
MATCH (h:Company {name:'华为'})<-[:SUPPLIES_TO]-(s)-[:SUPPLIES_TO]->(x:Company {name:'小米'})
RETURN s.name
多跳天然直观:(a)-[:KNOWS*1..3]->(b) 表示 1 到 3 跳——这正是 kp-025 多跳检索的语言基础。
属性图 vs RDF 怎么选:RAG 与企业内部应用默认属性图(schema 灵活、工具链现代、LLM 生成 Cypher 语料丰富);需要强标准语义推理(OWL 公理、跨机构数据交换)时 RDF/SPARQL 有优势。两者之间还有 RDF★ 等演进,初学不必展开。
图库在 RAG 栈中的位置:图数据库不替代向量库,而是承担"结构化查询与多跳遍历"这一路(kp-025),产物(子图/路径)被序列化成文本进入上下文(kp-014 的组装)。
图示
// 多跳: 华为的供应商的母公司
MATCH (h:Company {name:'华为'})<-[:SUPPLIES_TO]-(s)-[:OWNED_BY]->(p:Company)
RETURN s.name AS 供应商, p.name AS 母公司
// 聚合: 每类风险物料的供应商数
MATCH (m:Material)<-[:SUPPLIES]-(s:Company)
RETURN m.name, count(DISTINCT s) AS 供应商数 ORDER BY 供应商数 DESC
实例或案例
- 供应链风险系统:Neo4j 存 10 万级公司节点,Cypher 一跳查"某物料的前五大供应商及其备份",毫秒级返回。
- GraphRAG 工作流:LLM 生成 Cypher(Text-to-Cypher)→ 图库执行 → 结果转文本 → 进 prompt(kp-025)。
- 风控图谱多用 Gremlin/TinkerPop(与 Hadoop 生态集成)。
常见误区
- 误区一:"图数据库可以替代关系库/向量库"。图强在关系遍历;大规模扫描聚合(报表)SQL 仍占优,语义匹配仍要向量库——各司其职。
- 误区二:"无界遍历随便写"。
*无上限的变长路径在稠密图上会爆炸(组合数增长);永远给跳数上限与方向。 - 误区三:"RDF 已死/属性图不标准"。两者各有生态:开放数据与语义推理选 RDF,应用工程选属性图;按团队与场景选,不站队。
与其他知识点的关系
- kp-019:查询 pattern 依据 schema 词汇。
- kp-025:Text-to-Cypher 与子图检索的实现层。
- kp-024:Microsoft GraphRAG 产出的"社区树"同样可入图库承载。
自测题
- 属性图与 RDF 的核心区别?
答:属性图节点/边可直接挂属性、工程生态现代;RDF 以三元组+IRI 为原子、有 OWL/SPARQL 标准语义栈,重推理与开放数据交换。
- 写出"找出 2023 年后收购过 AI 公司的公司"的 Cypher 思路。
答:MATCH (a:Company)-[r:ACQUIRED]->(t:Company) WHERE t.industry='AI' AND r.date >= date('2023-01-01') RETURN a.name, t.name——时间走关系属性。
- 为什么变长路径必须设上限?
答:无界遍历在稠密图上路径数指数爆炸,查询超时拖垮库;显式 *1..3 限制跳数与方向是性能与安全的双重要求。
延伸阅读
- Neo4j 官方 Cypher 文档与 GraphAcademy 免费课程。
- Robinson 等《Graph Databases》(O'Reilly,免费电子版)。
- W3C SPARQL 1.1 规范(了解 RDF 侧即可)。