Neo4j:从文件里读数据(LOAD + FROM) → 在图里找节点(MATCH)或创建节点(MERGE) → 建立关系

一、先给你一个"总览直觉"

在 Neo4j 里,一条导入语句大致是这样工作的:

从文件里读数据(LOAD + FROM) →
在图里找节点(MATCH)或创建节点(MERGE) →
建立关系


二、一个一个拆开讲(非常重要)


1️⃣ LOAD CSV

✅ 是什么

LOAD CSV = "从 CSV 文件中一行一行读取数据"

你可以把它理解成:

"for each row in this CSV file"


✅ 你用过的例子

cypher 复制代码
LOAD CSV WITH HEADERS
FROM "file:///neo4j_wtg_nodes.csv" AS line

拆解意思:

部分 含义
LOAD CSV 说明要读 CSV
WITH HEADERS 第一行是列名
FROM "file:///xxx.csv" 文件路径
AS line 每一行叫 line

👉 之后你就可以用:

cypher 复制代码
line.node_id

❗什么时候用

✔ 导入数据时必用

✔ Neo4j 从外部文件读取数据的唯一方式之一


2️⃣ FROM

✅ 是什么

FROM = 指定数据来源

在 Neo4j 中几乎只跟 LOAD CSV 搭配。

cypher 复制代码
FROM "file:///xxx.csv"

注意两点(很重要):

  1. 必须放在 neo4j/import 目录
  2. 路径前面必须是:
text 复制代码
file:///

3️⃣ MATCH

✅ 是什么

MATCH = 在图数据库中"查找已经存在的节点或关系"

你可以把它理解成:

"在图里找符合条件的东西"


✅ 你用过的例子

cypher 复制代码
MATCH (a:WTG_Variable {name: line.src})
MATCH (b:WTG_Variable {name: line.dst})

含义是:

  • 找一个 name = line.src 的节点
  • 找一个 name = line.dst 的节点

⚠️ MATCH 不会创建东西

  • 找不到 → 返回空 → 后面的语句不执行

❗什么时候用

✔ 节点已经存在,只想用它

✔ 建立关系前几乎一定要 MATCH


4️⃣ MERGE(最关键的一个)

✅ 是什么

MERGE = "如果存在就用,不存在就创建"

它相当于:

SQL 里的 SELECT + INSERT 合体版


✅ 创建节点时

cypher 复制代码
MERGE (n:WTG_Variable {name: line.node_id});

意思是:

  • 如果已经有 name = xxx 的节点 → 用它
  • 如果没有 → 新建一个

👉 不会重复创建


✅ 创建关系时

cypher 复制代码
MERGE (a)-[:INFLUENCES]->(b);

意思是:

  • 关系存在 → 用
  • 不存在 → 创建

❗什么时候用

✔ 导入数据

✔ 防止重复节点 / 重复关系

✔ 90% 的导入语句都用 MERGE


三、把你真实用的导入语句完整拆一遍(重点)


节点导入语句

cypher 复制代码
LOAD CSV WITH HEADERS
FROM "file:///neo4j_wtg_nodes.csv" AS line
MERGE (n:WTG_Variable {name: line.node_id});

逐行解释:

  1. 从 CSV 读一行
  2. 这一行叫 line
  3. line.node_id 取变量名
  4. 如果这个变量节点存在 → 用
  5. 不存在 → 创建

关系导入语句

cypher 复制代码
LOAD CSV WITH HEADERS
FROM "file:///neo4j_wtg_relationships.csv" AS line
MATCH (a:WTG_Variable {name: line.src})
MATCH (b:WTG_Variable {name: line.dst})
MERGE (a)-[:INFLUENCES]->(b);

核心逻辑是:

  1. 从 CSV 读一行关系
  2. 找源节点 a
  3. 找目标节点 b
  4. 建立关系(不重复)

四、给你一张"什么时候用谁"的速查表

关键字 干啥的 什么时候用
LOAD CSV 读文件 导入 CSV
FROM 文件路径 只跟 LOAD 用
MATCH 找已有节点 建关系前
MERGE 找或建 导入节点 / 关系
CREATE 只创建 不怕重复时

五、一句话帮你彻底记住(你这个层次非常适合)

LOAD 负责"读数据",
MATCH 负责"找已有",
MERGE 负责"别重复",
FROM 只是"文件地址"。


相关推荐
Sayai3 天前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher
测试界的小码农3 天前
【图数据库实战进阶(01):从零认识 Neo4j,搭建第一个图数据库项目】
数据库·neo4j
测试界的小码农3 天前
【图数据库实战进阶(03):Neo4j 图数据建模实战——节点、关系与属性应该怎么设计?】
数据库·oracle·neo4j
小林ixn4 天前
GraphRAG 实战:用 Neo4j 知识图谱,让 RAG 从“找货“进化到“梳理关系“
人工智能·知识图谱·neo4j
Magicdata大数据19 天前
AI辅助教学:调用大模型从教材中生成习题,方便学员练习
java·spring boot·大模型·知识图谱·neo4j·ai辅助教学
星川皆无恙23 天前
基于知识图谱的百科问答系统:Django + Neo4j 与实现
人工智能·python·机器学习·自然语言处理·django·知识图谱·neo4j
Sayai24 天前
Neo4j 社区版高可用实战:DRBD 块级复制 + Keepalived 虚拟 IP 冷备切换(附启停 SOP 与脑裂防范)
运维·neo4j·keepalived·高可用·drbd
喵本喵叁肆1 个月前
diffprivlib 中文实战教程 · 第8讲:实战——从零改造一个 DP 模型
python·neo4j·差分隐私
智码看视界1 个月前
大数据架构解析—数据血缘:从 SQL 解析到字段级溯源,搭建大数据平台数据治理底座
数据治理·neo4j·元数据·sql解析·数据血缘·datalineage·sqlglot
quweiie1 个月前
Neo4j Community 安全访问配置总结
数据库·centos·neo4j