前置知识
知识图谱
认识知识图谱
知识图谱就是用「图结构」来表示世界上的事物、事物的属性、以及事物之间的关系。
简单说,知识图谱就是通过不同知识的关联性形成一个网状的知识结构,而这个知识结构,恰好就是人工智能AI的基石。当前 AI 领域热门的计算机图像、语音识别、NLP,离不开 AI 的感知能力,真正 AI 的认知能力,就要靠知识图谱。
关系型数据库中,我们都知道它使用字段和关联来表示数据,但是它并不擅长去做关系。
知识图谱,Knowledge Graphs, KG,它由三部分组成:
- 实体:现实中的对象
- 人、公司、设备、地点………..
- 属性:实体的特征
- 年龄、身高、价格、生产日期、性别………..
- 关系:实体之间的连接
- 朋友、出演、属于、治疗、包含、购买、位于………..
那么,知识图谱中,一条数据的标准表示方式如下
- (实体) —[关系]→ (实体)
这种关系可以被这样的理解
- 主语 (Subject) —[谓语 (Predicate)]—> 宾语 (Object)
这叫三元组 (Triple),是知识图谱的最小单元,而知识图谱的底层逻辑非常简单,就是由无数个三元组 (Triples)构成的网络,每一个三元组都对应知识图谱中的一段信息
它将零散的信息结构化。在 AI 看来,RDBMS 里的数据是死板的数字和字符串,而知识图谱里的数据是具有语义联系的实体。
把生活中的例子转换为上述关系非常简单且清晰
- 肺癌 —[可由]→ 吸烟 [导致]
- 小明 —[购买]→ 手机
- 华为 —[总部位于]→ 深圳
那么,有了这种数据,我们其实就可以得到各种各样的信息,以 二狗—[购买]→ 手机 为例子
- 数据层上,直接看,具体的点和边,结合出来有一个很明显的语义内容
- 模式上,有这个关系可以了解到,手机 可能是需要 购买 的,人 可能有 需要手机的 需求,从三元组中定义的规则、类别、约束,很容易能得到一些逻辑信息,然后,在这个基础上,结合别的信息,用逻辑规则还可以去自动推理出更多内容。知识智能的雏形得到初现。
知识图谱的三大能力决定它为什么是 AI 基础设施
- 关联能力:
- 它能把分散在不同系统、不同表的数据关联成一张网。一次交易可能涉及到 客户 → 订单 → 商品 → 仓库 → 物流 → 供应商 这样的信息流转。传统数据库要多次 JOIN,图数据库就能通过天然的关联关系一步到位。
- 推理能力
- 知识图谱可以做逻辑推理,例如对于这样的关系,药物 A 治疗疾病 B,疾病 B 由病毒 C 引起 → 药物 A 可能抑制病毒 C,这完全是合理的推理。大模型最需要这种能力
- 解释能力
- AI可信的关键在于此,因为大模型回答问题其实算个黑盒。但是知识图谱可以告诉你答案来自哪条知识,经过了哪些关系路径
总之,知识图谱就是把信息变成可计算、可推理的知识。
最后了解一下知识图谱是如何构建的:
- 数据抽取:首先你得有数据来源,然后从中提取实体与关系
- 实体对齐 / 融合:这部分是把同类型但说法不同的实体进行对齐,对存在歧义的实体进行校正
- 质量清洗:去重、纠错
- 本体建模:定义模式
- 存储
- 查询与推理
Neo4j 本质就是知识图谱的工程实现。上述第5,6两步我们都会使用到 Neo4j
理解知识图谱的应用
很多人以为知识图谱就是画个图,这是浅层理解。实际上,知识图谱最重要的是把抽象的知识给结构化表示
传统数据库是表格,适合记录事实,虽然能表达关系,但是语义性很弱。因为他们都说数据,数据虽然能结构化,但它们通常是离散的。而知识图谱本身就是一个语义网络,把生活中的知识和实体之间的关系转换成知识图谱来表示非常简单,它让机器:
- 知道 “谁是谁”
- 知道 “什么和什么有关”
- 知道 “什么导致什么”
- 能做推理
AI 大模型最擅长的其实是统计、生成等,但不擅长事实、逻辑、可解释性。而这些内容正好是生成式AI最需要具备的。知识图谱正好弥补了上述内容,使得知识内容事实准确,关系清晰,可推理,可追溯,可解释
而且我们都知道,AI 目前面临的最大问题是幻觉,因为大模型(LLM)本质是概率模型,不是事实模型。
所以说,我们通过将非结构化文本转化为 Neo4j 里的结构化知识图谱,可以为 AI 提供一个事实来源。这样 LLM 不能瞎编,因为答案必须来自图谱里真实存在的路径。
那么上述情况的最直接应用就是图谱增强提示词
- 查询阶段: 用户提问“张三的导师是谁?”
- 提取实体: 系统利用 NER(命名实体识别)提取出“张三”。
- 图谱检索: 在 Neo4j 执行
MATCH (p:Person {name:'张三'})-[:ADVISED_BY]->(m) RETURN m.name。- 注入 Context: 将查询结果“李四”和原本的文本片段一起喂给 LLM。
- Prompt 示例: “已知确切事实:张三的导师是李四。请结合以下参考文档回答用户问题…”
- 逻辑兜底: 如果图谱中没有这个关系,系统可以直接告知用户“数据库中暂无该逻辑关联”,而不是让 LLM 去猜。
那么有人就会问,这个向量数据库不是也能做吗?
其实也可以,因为向量数据库是存在消除歧义的能力的,但在 实体对齐 上几乎无能为力。
向量数据库的强项是通过上下文嵌入(Embedding),可以区分“苹果”是水果还是公司。因为它捕捉的是概率分布:在“好吃、多汁”附近的“苹果”与在“芯片、手机”附近的“苹果”在空间向量上距离很远。
但是面对实体对齐,向量数据库就难以处理
例如。
你的公司有两个“二狗”,一个是财务部经理,一个是保洁员。搜索“二狗的工资”时,向量数据库可能会把两人的文档都召回,因为它无法通过简单的语义向量区分“张三(ID:001)”和“张三(ID:999)”。
KG 通过 唯一标识符(IRI/ID,当主键想就可以)
将实体锁定。每个节点都是唯一的,从而意义上不同的两个实体(:Staff {id:001, name:'张三'})
和 (:Staff {id:999, name:'张三'})
是物理隔离的,尽管他们名字相同。
而且,传统的 RAG 依赖向量相似度,它能找到 语义相近 的内容,但是 逻辑关联 相关的处理,最后大部分时候还是要落到知识图谱这边来的。
就好像有人问了一句:谁是张三的导师?在向量数据库中可能召回一大堆包含张三和导师字样的文档片段。而知识图谱可以直接沿着(张三)-[:导师]->(李四)
的路径精准定位。
而且 AI 可以利用图谱进行简单推理。比如图中存在
A 是 B 的主管,B 是 C 的主管,AI
即使没有被直接告知,也能通过路径分析推断出
A 是 C 的间接领导。这种推理是合理的,有逻辑的,因为有图数据库的支撑。
所以说,擅长感性关联和模糊匹配的向量数据库和擅长严密逻辑和精确定义的知识图谱,在现代 AI 应用中,他们负责的是两个内容。
- 向量数据库负责全局召回,对于那些非结构化索引,他们通常难以其提取三元组的信息。一般是当用户提问比较模糊时,向量数据库能快速锁定相关的文本片段。在长轮对话和长上下文中,向量数据库负责为 LLM 提供大背景素材。
- 知识图谱负责知识的锚定和推理,当 LLM 生成一个结论后,系统去 Neo4j 里查询是否存在对应的路径,来验证AI生成内容的准确度。而且像这种跳跃性关系非常强的查询上,这种问题只靠向量检索难以处理。
GraphRAG
最后,Neo4j 现在原生支持向量索引。
这意味着你可以把实体描述的向量和实体间的关系存在同一个地方,实现 向量搜索 + 图遍历 的混合检索。也就是说,可以用 Neo4j 的向量能力去一定程度上去做向量数据库的事情,而保持其为图数据库的根本特征。
向量搜索是解决语义相似的问题的。它理解的是含义,而不是死板的词语。
就好像,搜索“性价比高的相机”。传统的关键词匹配可能只会找包含“性价比”、“相机”这些词的商品。向量搜索会将“性价比高的相机”这句话转换成一个高维空间中的向量然后,它会去寻找那些在语义上最接近的商品,即使它们的描述里没有“性价比”这个词,但可能是“价格实惠、耐用、适合新手”的相机。
图遍历是解决关系连接的问题的。将 Neo4j 作为 LLM 的 外部事实库,LLM 负责理解问题,Neo4j 负责提供多跳(Multi-hop)的逻辑链条, 向量搜索 + 图遍历 的混合检索能大幅降低 AI 乱造事实的概率。
举个例子:找到我朋友买过的、和《三体》风格类似的科幻小说
- 图遍历:Neo4j 先在图中找到 你 这个节点,然后沿着 朋友 关系,找到您所有朋友的节点。
- 向量搜索:接着,Neo4j 找到《三体》这本书的向量表示,然后在您朋友们买过的所有书中,进行向量相似度搜索,找出那些在 风格 上最接近《三体》的书。
这个过程在一个数据库内一气呵成,既利用了图的 关系路径,又利用了向量的 语义理解。
上述内容一定程度就是 GraphRAG 的体现。 GraphRAG = 知识图谱的结构化能力 + 大模型的语义理解能力 + 检索增强架构。GraphRAG 先给无数的向量或者知识建立一个知识图谱,然后再让 AI 沿着地图去寻找答案。
微软(Microsoft)在 2024 年开源了同名项目,正式确立了这个概念。它主要解决了传统 RAG 的一个致命缺陷:无法回答 全局性 或 跨文档 的问题。
GraphRAG 的实现通常分为两个阶段:索引阶段(Indexing) 和 查询阶段(Querying)。
索引阶段
实体和关系提取: 利用 LLM 扫描非结构化文本,提取出所有的节点和边。
Community Detection:先翻译成社区分层发现吧, 这是 GraphRAG 的灵魂。利用算法(如 Louvain 或 Leiden 算法)将图谱划分为不同的 社区。比如,所有的 Java相关 节点组成一个社区, 微服务相关 组成另一个。
社区摘要:让 LLM 为每个社区生成摘要。
查询阶段
根据用户问题的不同,通常情况下 GraphRAG 是提供两种检索模式的
- 局部检索:
- 全局检索
所以说,传统 RAG 去做向量检索的时候,数组组织是孤立的文本块 Chunks,靠的是文本块的向量相似度来匹配的,复杂推理能力就比较弱,但是直接把知识内容直接向量化就能使用,比较轻松。而 GraphRAG 一般需要结合知识图谱,把数据用相互关联的语义网络组织起来,检索范围是局部关系和全局拓扑都考虑的,复杂推理能力就比较强,但是需要将抽象知识内容进行 ETL 过程提取三元组,而且数据提取的成本太高,让 LLM 扫描 100 万字并提取三元组,Token 消耗是恐怖的。很多情况下,核心业务实体手动建模,普通信息走向量检索。
如果尝试在 Java 生态下实现 GraphRAG,工具栈大概是:Neo4j 存储图,Elasticsearch或者Milvus存储向量。或者 Neo4j 把图和向量都存储起来。编排AI使用老面孔 LangChain4j
一些图论基础
Neo4j 属于属性图(Property Graph)模型。为了驾驭它,需要详细了解以下五个维度的图论基础:
图的构成要素
图论最基本的定义是:图 G = (V, E),其中 V 是顶点的集合,E 是边的集合。
- 顶点:代表现实世界中的实体。Neo4j 中称为节点。在知识图谱中,每个节点通常有一个或多个标签(Label)
- 边:连接两个顶点的线,代表实体间的关联。Neo4j 中称为关系。在 Neo4j 中,关系是一等公民,这意味着关系可以像节点一样拥有属性
图的分类与方向
有向图 vs. 无向图
- 有向图: 边是有方向的。例如
(A)-[:主管]->(B),A 是 B 的上级,反之则不成立。 - 无向图: 边没有方向。例如
(A)-[:同事]-(B),关系是双向平等的。 - Neo4j 实践: Neo4j
在物理存储上必须指定方向,但在查询时(Cypher)可以忽略方向
(a)--(b)。
度 (Degree)
- 入度 (In-degree): 指向该节点的边数。
- 出度 (Out-degree): 从该节点出发的边数。
- 超级节点问题: 当一个节点的度数极高(如“周杰伦”拥有千万级粉丝节点),在图计算中会引发性能瓶颈。这是后端优化时必须考虑的。
路径与连通性
这是图数据库最核心的优势,也是 GraphRAG 进行逻辑推理的基础。
路径 (Path)
- 定义: 顶点和边的交替序列。
- 步长 (Hop): 路径中边的数量。
- 多跳查询 (Multi-hop): 比如“朋友的朋友的朋友”,这就是一个 3-hop 查询。Neo4j 擅长处理这种在 RDBMS 中需要多次 Join 才能做到的这种多关系操作。
环 (Cycle)
- 定义: 起点和终点是同一个节点的路径。
- 有向无环图 (DAG): 这是一个极其重要的概念。在 AI 工作流(如 Dify 的编排)或任务调度中,通常要求图是 DAG,以避免死循环。
连通性 (Connectivity)
- 连通分量: 图中彼此相连的节点子集。在做 AI 社群发现或洗钱风控时,我们通过识别孤立的连通分量来划分不同的团伙。
遍历算法
深度优先搜索 (DFS):
逻辑: 沿着一条路走到底,再回溯。
场景: 寻找两个实体之间是否存在某种深层的、长路径的关联。
广度优先搜索 (BFS):
逻辑: 先访问所有邻居,再访问邻居的邻居。
场景: 寻找最短路径。比如在社交推荐中,找“你可能认识的人”。
属性图模型
这是 Neo4j 特有的图论实现方式
- 标签 (Labels): 用于对节点分类(类似于 Java 中的类名)。
- 属性 (Properties):
节点和关系都可以存储键值对(类似于 Map)。
- 例子: 节点
(张三)有属性{age: 25};关系[:导师]有属性{since: '2023'}。
- 例子: 节点
- 权重 (Weight): 边上的属性通常作为“权重”,用于计算加权最短路径(如导航算法或推荐算法)。
图数据库与传统 RDBMS
对于 Java 开发者来说,理解 Neo4j 最快的方式是将其与 MySQL 进行对比。
RDBMS 对数据的处理其实是一种可关系化的表格思维,一条条数据存储在扁平的表中。当需要表达复杂关系时,通常情况下我们依赖外键 (Foreign Key) 和 多表关联 (Join)来处理数据的关系
但是,我们想想,平常两张表以上的关联查询,都很容易涉及到子查询,而且他们之间如果还要外键关系,那么查询语句会非常复杂,所以说,关系型数据库它并不擅长去做数据之间的关系。当关联层级达到 3 层以上时,SQL 语句会变得极其复杂,且多表 Join 会产生巨大的笛卡尔积,导致性能指数级下降。
Neo4j 是对象思维,它是原生的图数据库。数据存储方式与我们在白板上画的逻辑图一致。这种图数据库在存储数据的时候,关系就是物理存储的,自己组织起来的。
关系(Relationship)在物理存储上就是指针。无论你的数据量有多大,就好像去查询朋友的朋友的朋友这种深层关系时,其响应速度是常数级的。
总体来说对比一下
| 关系型数据库 (MySQL) | 图数据库 (Neo4j) | |
|---|---|---|
| 数据单元 | 行 (Row) | 节点 (Node) |
| 分类 | 表 (Table) | 标签 (Label) |
| 联系 | 外键 / 连接表 | 关系 (Relationship) |
| 属性 | 列 (Column) | 属性 (Property) |
| 查询语言 | SQL | Cypher (图形化声明语言) |
关系型数据库使用 SQL 查询语言,而 Neo4j 这种图数据库使用 Cypher 图形化声明语言
一些简单的图数据科学知识
图数据科学(Graph Data Science, GDS)正是利用图算法从你存储的关系数据中挖掘出隐藏的模式、洞见和预测性特征。
图算法是图数据科学的基石。Neo4j 的 GDS 库内置了丰富的算法,主要可以分为以下五大类。
中心性算法
这类算法用来识别图中最重要的节点。重要性可以自己根据情况去做不同的定义,比如谁是人脉最广的,谁是信息传递的关键枢纽。
- 度中心性 (Degree Centrality):最简单直接,计算一个节点拥有多少条关系。在社交网络中,这代表一个人的“朋友数量”,朋友越多,度中心性越高。
- 中介中心性 (Betweenness Centrality):衡量一个节点在多大程度上位于其他节点对之间的最短路径上。这类节点是网络中的“桥梁”或“把关人”,控制着信息的流动。在物流网络中,这可以用来识别关键的转运中心。
- PageRank 算法:最初由谷歌用于网页排名。它不仅看一个节点有多少连接,还要看连接它的那些节点本身是否重要。一个被很多重要人物关注的人,其 PageRank 值会更高。
社群检测算法 (Community Detection Algorithms)
这类算法的目标是将图中的节点划分成不同的“社群”或“簇”,使得社群内部的节点连接紧密,而社群之间的连接稀疏。
- Louvain 算法:一种非常流行的高效算法,它通过优化模块度来发现社群。例如,在社交网络中,它可以自动发现“大学同学圈”、“同事圈”、“家庭圈”等。
- 标签传播算法 (Label Propagation):一种快速的社群发现算法。它的基本思想是,一个节点应该与其大多数邻居节点属于同一个社群。
节点相似性算法 (Node Similarity Algorithms)
这类算法用于衡量图中两个节点之间的相似程度。
- Jaccard 相似性:通过比较两个节点的邻居集合的重叠程度来计算相似性。例如,如果两个用户关注了大部分相同的博主,那么他们的 Jaccard 相似性就很高。
- 余弦相似性 (Cosine Similarity):在将节点表示为向量(例如,通过图嵌入算法)后,计算两个向量之间的夹角余弦值,以此衡量相似性。
路径查找算法 (Pathfinding Algorithms)
这类算法用于在图中寻找两个或多个节点之间的路径,是导航和路由问题的基础。
- 最短路径 (Shortest Path):寻找两个节点之间经过边数最少或权重总和最小的路径。例如,地图导航中的“最快路线”规划。
- A 算法:一种启发式搜索算法,在寻找最短路径时加入了目标方向的启发信息,通常比 Dijkstra 算法更快。
链接预测算法 (Link Prediction Algorithms)
这类算法用于预测图中未来可能出现的新关系,或者发现图中缺失的关系。
- 共同邻居 (Common Neighbors):一个非常直观的指标,认为两个节点之间如果有很多共同的邻居,那么它们之间形成新连接的可能性就很大。这就是社交软件中“你可能认识的人”功能背后的核心思想之一。
- 基于图的嵌入 (Graph Embedding):将图中的节点映射成低维向量,这些向量保留了图的结构信息。然后,可以使用这些向量来训练机器学习模型,预测两个节点之间是否存在链接。
在 Neo4j 中使用图数据科学库(GDS)进行分析,通常的流程是这样的
- 读取图数据:从你的 Neo4j 数据库中,通过 Cypher 查询语句选择需要分析的节点和关系。
- 创建图投影:将上一步选中的数据加载到 GDS 的内存中,创建一个图投影(Graph Projection),就有点类似于 MySQL 的视图。图算法是在这个内存图上运行的,速度非常快。
- 运行图算法:在创建好的图投影上,调用你想要使用的图算法(如 PageRank, Louvain 等)。
- 写回结果:将算法运行的结果(例如,每个节点的社群ID、中心性分数)写回到 Neo4j 数据库中,作为节点的新属性,以便后续查询或可视化。
Neo4j 官方提供了 GDS Python
客户端的库,好像是graphdatascience 库
Neo4j
非 AI 场景的应用
Neo4j 是一款原生图数据库,这意味着它在存储层实现了真正的图模型。数据并不是在其他技术之上使用“图抽象”,而是以您在白板上构思想法的相同方式存储在 Neo4j 中。
Neo4j 使用 Java 和 Scala 编写。您可以在 GitHub 上查看源代码。
它将数据之间的“关系”提升到与数据本身同等重要的地位,并将其作为一等公民进行物理存储和优化。这与传统关系型数据库通过外键和 JOIN 操作在查询时去模拟这种关系有着本质区别。
上面提到了一些 Neo4j 在 AI 场景的应用
在关系型数据库中,我们追求范式;在图数据库中,我们追求业务语义。
一个好的知识图谱能够直接映射业务逻辑。我之前做过的 科研项目管理平台 中的项目、人员、论文、资金流动建立成图模型,你会发现:
- MySQL: 需要 5 张表关联才能查出的“跨学科合作链条”。
- Neo4j: 只需要一个
(p1:Expert)-[:COLLABORATED_WITH*1..3]-(p2:Expert)就能搞定。
传统查询中,最让人头疼的基本就是多表关联查询,一旦涉及到子查询就更难以绷得住,这种情况我们可以试着用 Cypher 来重构它。使其语义化,简单化。
那么,在图数据库中追求业务语义,就是想想,那些数据和业务能够天然的被组织成图结构关系
例如,社交网络中的关注、好友等行为天然就是图结构。你想想,就例如b站的共同关注,关注了他的谁是你的好友,你的好友中的谁你可能认识,就这种很明显的,关系 是主要数据组织的,数据之前强关系的,就可以考虑组织成图的形式,存储到 Neo4j 里,分析简单,而且比关联查询什么的速度快很多
而且,这种图数据库能够找出隐藏的关系,例如在公安风控和金融安全领域,欺诈和风控行为往往不是孤立的,而是以团伙形式出现。Neo4j 擅长通过关联分析,发现这些隐藏在网络中的异常模式。
使用 Neo4j 就可以快速构建用户、设备、银行卡、手机号之间的复杂关系网络,通过图算法或模式匹配来识别风险。个常见的反欺诈场景是,检查一个设备是否被过多的用户登录过,这可能是“刷单”或“账号农场”的迹象。
再说 Neo4j 在推荐上也比较广泛,推荐算法本质上就是组织和分析高关系密度的数据,现在虽然说推荐系统常与 AI 结合,但其基础功能完全可以通过图数据库高效实现,无需复杂的模型训练。
和社交有一定类似,就例如“购买了此商品的用户也购买了…”、“根据你的浏览历史推荐商品”。相比大家都能理解,使用 Neo4j 但是用户-购买-商品”的关系链,可以快速找到商品之间的共现关系,实现实时、可解释的推荐
使用Neo4j
Neo4j 可视化
具体的安装,启动,注册为服务的相关内容我就不说了
https://blog.csdn.net/weixin_51998255/article/details/141559877,推荐看这个
Neo4j 服务具有一个集成的浏览器客户端,在启动 Neo4j 服务之后,可以使用 Neo4j 集成的浏览器管理图数据库。
默认的端口是7474,http://localhost:7474/,打开后基本就是这样的场景
- 一上来就是数据库的信息,左边是节点,关系和属性键的信息展示,右边是控制台,最上方的输入框(
neo4j$)是你输入代码(Cypher 查询语言)的地方。
我们使用创建一些内容然后去操作他们,感受一下
- Cypher 的语法非常像 ASCII 艺术画,、我感觉非常直观。
1 | // 创建两个人物节点,以及他们之间的“认识”关系 |
然后,你也可以下载一个
来使用,我倒是感觉这个是很好用的
继续,对于上面的关系,我们在桌面端这个进行查找,打开后
首先会让你本地实例的配置,正常配置即可,你可以把“Instance”(实例)理解为一个独立的数据库服务容器。每一个实例都拥有自己独立的存储空间、配置文件(比如内存大小设置)、数据库用户密码以及里面的数据。在 Neo4j Desktop 中,你可以创建多个本地实例。这些内容和很多关系型数据库的设计是类似的,很好理解
然后,继续我们的使用体验
查找所有人
1 | MATCH (p:Person) |
遍历关系
1 | // 匹配 Alice 节点,沿着 KNOWS 关系,找到 Bob 节点 |
- 这行代码就像在图上画了一条线:从 Alice 出发,沿着
KNOWS箭头,指向friend。结果会把 Alice 和她的朋友都画出来。
修改数据
1 | // 假设 Alice 和 Bob 现在不仅仅是认识,Alice 还在工作中指导了 Bob。我们要给这条关系增加一个属性,或者给 Bob 加个属性 |
删除数据
1 | // 删除特定关系 |
刚才我们自己写的太简单了?Neo4j 自带了一个非常经典的“电影图谱”脚本,可以让你立刻看到复杂数据的样子。
在控制台输入以下命令并执行:
1 | :play movie-graph |
界面会变成一个教学指南。你可以点击指南中的代码块直接运行。它会帮你创建导演、演员、电影以及他们之间复杂的“出演”、“导演”关系。
与 Neo4j 进行简单的交互
Neo4j 使用 Cypher®,这是一种声明式查询语言,类似于 SQL,但针对图进行了优化。其他数据库(如 SAP HANA Graph)也通过 openCypher 项目使用同一种语言。
另一种选择是使用库。Neo4j 目前支持 Java、JavaScript、.NET、Python、Go、GraphQL、Spring 等。
在 Java 项目中集成 Neo4j,主要有两种方式:
Neo4j Java Driver:
这是 Neo4j 官方提供的底层驱动,直接使用 Cypher 语句与数据库交互,一般情况下是在需要完全控制查询逻辑,或在不使用 Spring 框架的项目中直接使用它
Spring Data Neo4j
基于 Java Driver 的上层封装,提供了类似 JPA 的对象-图映射(OGM)功能,能极大简化开发。它通过简单的注解就能将 Java 对象与图结构对应起来,并提供了接口,让你能像使用 JPA 一样操作图数据库,而且用起来你并不会感受到跟其他数据库那种割裂的感觉
相关内容,之后在讲解





