***
## 一、准备两份 CSV 文件
导入前需将倪李神学数据整理为两个标准文件 :[1]
**`nodes.csv`**(节点文件)
“`csv
id,name,label,tradition,
1,神圣经纶,Concept,倪李神学,
2,神圣生命,Concept,倪李神学,
3,人的灵,Concept,倪李神学,人接触神的器官
4,召会建造,Concept,倪李神学,神经纶的终极目标
5,倪柝声,Person,倪李神学,1903-1972
6,李常受,Person,倪李神学,1905-1997
7,属灵人,Book,倪李神学,倪柝声著;1928
8,生命读经,Book,倪李神学,李常受著
“`
**`relationships.csv`**(关系文件)
“`csv
source_id,target_id,type
1,4,目标是
2,3,经由
3,4,成就
5,7,著作
6,8,著作
7,3,阐释
8,1,阐释
“`
> **关键要求**:文件须为 UTF-8 编码,列名一致,无空行 。[1]
***
## 二、放置文件到 Neo4j import 目录
本地 Neo4j Desktop 使用 `file:///` 路径,文件必须放在指定目录 :[2][3]
– **Windows**:`C:\Users\<用户名>\.
– **macOS/Linux**:`~/.
– **Neo4j Aura(云端)**:需将 CSV 托管在 HTTPS URL(如 GitHub Raw 或 Google Drive 公开链接)[1]
***
## 三、用 Cypher LOAD CSV 导入节点
在 Neo4j Browser 中执行以下语句 :[4][1]
“`cypher
// 第一步:建立唯一性约束,防止重复节点
CREATE CONSTRAINT concept_id IF NOT EXISTS
FOR (n:Concept) REQUIRE n.id IS UNIQUE;
// 第二步:导入节点(用 MERGE 防止重复)
LOAD CSV WITH HEADERS FROM ‘file:///nodes.csv’ AS row
CALL {
WITH row
MERGE (n {id: toInteger(row.id)})
SET n.name = row.name,
n.tradition = row.tradition,
n.description = row.description
} IN TRANSACTIONS OF 500 ROWS;
“`
***
## 四、导入关系
节点导入完成后,再导入关系 :[5][4]
“`cypher
LOAD CSV WITH HEADERS FROM ‘file:///relationships.csv’ AS row
CALL {
WITH row
MATCH (a {id: toInteger(row.source_id)})
MATCH (b {id: toInteger(row.target_id)})
MERGE (a)-[r:RELATED_TO {type: row.type}]->(b)
} IN TRANSACTIONS OF 500 ROWS;
“`
> **注意**:倪李神学关系类型多样(著作、阐释、衍生自等),
***
## 五、Python 批量导入(推荐自动化)
若从 GraphRAG/LightRAG 输出的 CSV 批量导入,Python 驱动效率更高 :[6][7]
“`python
import pandas as pd
from neo4j import GraphDatabase
driver = GraphDatabase.driver(“bolt://
nodes_df = pd.read_csv(“nodes.csv”)
rels_df = pd.read_csv(“relationships.
def import_nodes(tx, batch):
tx.run(“””
UNWIND $rows AS row
MERGE (n {id: row.id})
SET n.name = row.name, n.label = row.label,
n.tradition = row.tradition
“””, rows=batch)
def import_rels(tx, batch):
tx.run(“””
UNWIND $rows AS row
MATCH (a {id: row.source_id})
MATCH (b {id: row.target_id})
MERGE (a)-[r:RELATED_TO {type: row.type}]->(b)
“””, rows=batch)
batch_size = 500
with driver.session() as session:
# 批量导入节点
for i in range(0, len(nodes_df), batch_size):
batch = nodes_df.iloc[i:i+batch_size].
session.execute_write(import_
# 批量导入关系
for i in range(0, len(rels_df), batch_size):
batch = rels_df.iloc[i:i+batch_size].
session.execute_write(import_
print(“导入完成”)
driver.close()
“`
***
## 六、验证与可视化
导入后在 Neo4j Browser 运行以下查询验证结果 :[8]
“`cypher
// 查看全图(适合小型图谱)
MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 100
// 查看某节点的两跳邻居(如”召会建造”)
MATCH (n {name: ‘召会建造’})-[r*1..2]-(m)
RETURN n, r, m
// 统计节点与关系数量
MATCH (n) RETURN count(n) AS 节点总数
MATCH ()-[r]->() RETURN count(r) AS 关系总数
“`
Browser 中可通过右侧面板为不同标签(`Concept`、`
Sources
[1] Import CSV to Neo4j – CSVBox Blog https://blog.csvbox.io/import-
[2] Loading csv into neo4j desktop – General https://community.neo4j.com/t/
[3] Import CSV File into Neo4j Desktop Seamlessly – YouTube https://www.youtube.com/watch?
[4] Fastest way to load data in neo4j using python – Cypher https://community.neo4j.com/t/
[5] (Neo4j-driver) – How to do batch insert relationship with Python https://stackoverflow.com/
[6] Adding relationships efficiently. Neo4j – python – Stack Overflow https://stackoverflow.com/
[7] How to do large batch insert or upsert nodes and relationship neo4j … https://community.neo4j.com/t/
[8] 【Neo4j与知识图谱】
[9] Neo4j Live: Stunning Graph Visualizations with NVL – YouTube https://www.youtube.com/watch?
[10] Importing CSV Files into Neo4j: A Beginner’s Guide to Cypher and … https://www.youtube.com/watch?
[11] Help with data import and creating a relationship – Cypher https://community.neo4j.com/t/
[12] Loading CSV to neo4j from python – Reddit https://www.reddit.com/r/