一、先给你一个"总览直觉"
在 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"
注意两点(很重要):
- 必须放在
neo4j/import目录 - 路径前面必须是:
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});
逐行解释:
- 从 CSV 读一行
- 这一行叫
line line.node_id取变量名- 如果这个变量节点存在 → 用
- 不存在 → 创建
关系导入语句
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);
核心逻辑是:
- 从 CSV 读一行关系
- 找源节点
a - 找目标节点
b - 建立关系(不重复)
四、给你一张"什么时候用谁"的速查表
| 关键字 | 干啥的 | 什么时候用 |
|---|---|---|
LOAD CSV |
读文件 | 导入 CSV |
FROM |
文件路径 | 只跟 LOAD 用 |
MATCH |
找已有节点 | 建关系前 |
MERGE |
找或建 | 导入节点 / 关系 |
CREATE |
只创建 | 不怕重复时 |
五、一句话帮你彻底记住(你这个层次非常适合)
LOAD 负责"读数据",
MATCH 负责"找已有",
MERGE 负责"别重复",
FROM 只是"文件地址"。