Neo4j常见语句-merge

merge用法:MERGE 是 Neo4j 中一个强大的操作符,用于确保图中存在特定的节点或关系。它的核心逻辑是:如果目标存在则匹配,不存在则创建

基本语法与逻辑:

bash 复制代码
MERGE <pattern>
[ON CREATE <create_clause>]  // 不存在时执行
[ON MATCH <match_clause>]     // 存在时执行

(1). 简单创建 / 匹配节点

bash 复制代码
 // 确保存在一个名为"周杰伦"的歌手节点 (多次执行以下语句,只会插入一条数据,因为如果存在则不执行)
MERGE (s:Singer {name: "周杰伦"})
RETURN s

(2)带属性更新的节点 MERGE

bash 复制代码
  // 创建或更新节点属性 (因为上面 周杰伦这条数据创建过,所以走Match,会创建一个lastUpdate 属性)
MERGE (s:Singer {name: "周杰伦"})
ON CREATE SET s.age = 43, s.debut = 2000
ON MATCH SET s.lastUpdate = timestamp()
RETURN s

(3)合并多个标签的节点

bash 复制代码
  // 节点同时属于歌手和演员 (也就是说同时创建3个node 节点Person、Singer、Actor,name属性为刘德华)
MERGE (p:Person:Singer:Actor {name: "刘德华"})
SET p.age = 61
RETURN p

注释:打个比方,如果我已经存在了Person,Singer nodej节点的刘德华,但是没有Actor 节点,执行上面语句,只会创建Actor节点,其他两个节点不会创建

(4)创建 / 匹配节点间的关系

bash 复制代码
  // 确保周杰伦和陈奕迅之间存在"朋友"关系(在如下语句里面会创建周杰伦和陈奕迅这两个节点数据,然后给他们设置关系(如果关系不存在的话))
MERGE (j:Singer {name: "周杰伦"})
MERGE (e:Singer {name: "陈奕迅"})
MERGE (j)-[r:FRIEND]->(e)
SET r.since = 2005
RETURN r

(5)带条件更新的关系 MERGE

bash 复制代码
 // 匹配或创建关系,并根据情况更新属性 (如下语句,因为已经存在两个节点,所以会设置lastMet的关系属性)
MERGE (j:Singer {name: "周杰伦"})-[r:FRIEND]-(e:Singer {name: "陈奕迅"})
ON CREATE SET r.since = 2005, r.verified = true
ON MATCH SET r.lastMet = timestamp()
RETURN r

(6)MERGE 与 UNIQUE 约束结合

创建唯一性约束

bash 复制代码
  // 确保姓名是歌手节点的唯一标识
CREATE CONSTRAINT ON (s:Singer) ASSERT s.name IS UNIQUE

基于约束的 MERGE

bash 复制代码
 // 约束会增强 MERGE 的匹配效率
MERGE (s:Singer {name: "王菲"})
SET s.gender = "女"
RETURN s

(7)MERGE 的性能优化

使用 UNWIND 批量处理

bash 复制代码
 // 批量创建多个歌手节点
WITH [
  {name: "张学友", age: 62},
  {name: "郭富城", age: 58}
] AS singers

UNWIND singers AS singer
MERGE (s:Singer {name: singer.name})
SET s.age = singer.age
RETURN count(s)

(8)MERGE 的注意事项

bash 复制代码
a.模式匹配的精确性:
MERGE (n:Person {name: "张三"}) 只会匹配完全符合属性的节点,若节点还有其他属性(如 age),仍会被匹配。
b.性能开销:
MERGE 比 CREATE 慢,因为它需要先检查是否存在,适合需要避免重复数据的场景。
c.与 WHERE 结合
// 仅当歌手年龄小于60时才创建关系
MERGE (j:Singer {name: "周杰伦"})
MERGE (s:Singer {name: "孙燕姿"})
WHERE s.age < 60
MERGE (j)-[r:COLLABORATED]->(s)
相关推荐
羊羊小栈15 天前
基于GraphRAG的医疗健康知识诊断系统(Neo4j_大语言模型)
人工智能·语言模型·毕业设计·知识图谱·创业创新·neo4j·大作业
羊羊小栈19 天前
基于GraphRAG的地质矿产知识管理系统(Neo4j_大语言模型)
人工智能·语言模型·自然语言处理·毕业设计·neo4j·大作业
夜郎king20 天前
SpringBoot 整合 Neo4j 实战:从零搭建经典小说知识图谱完整方案
spring boot·知识图谱·neo4j
羊羊小栈21 天前
基于知识图谱(Neo4j)和大语言模型(LLM)的图检索增强(GraphRAG)的数控车床主轴系统故障诊断智能问答系统
人工智能·语言模型·毕业设计·知识图谱·创业创新·neo4j·大作业
_Rookie._22 天前
neo4j图形数据库 -基础语法
neo4j
星川皆无恙22 天前
基于BERT+LSTM+CRF与知识图谱的医疗智能问答系统实战:Neo4j图数据库+实体识别+意图分析完整项目
数据库·人工智能·深度学习·bert·lstm·知识图谱·neo4j
飞行家贞贞24 天前
Windows 安装 Neo4j(2025最新·极简)
neo4j
ins_lizhiming25 天前
多模态+neo4j+langchain构建知识图谱问答
langchain·知识图谱·neo4j
qq_356408661 个月前
Neo4j RPM 安装与多实例配置说明
neo4j
codefan※1 个月前
干掉幻觉实战:如何构建企业级知识图谱增强 RAG
人工智能·大模型·llm·知识图谱·neo4j·rag·graphrag