以下是将倪李神学 CSV 数据导入 Neo4j 的完整步骤,从准备数据到可视化查询一步到位。

***

## 一、准备两份 CSV 文件

导入前需将倪李神学数据整理为两个标准文件 :[1]

**`nodes.csv`**(节点文件)
“`csv
id,name,label,tradition,description
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\<用户名>\.Neo4jDesktop\relate-data\dbmss\<db-id>\import\`
– **macOS/Linux**:`~/.Neo4jDesktop/relate-data/dbmss/<db-id>/import/`
– **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;
“`

> **注意**:倪李神学关系类型多样(著作、阐释、衍生自等),若要让关系类型成为真正的 Neo4j 关系标签(而非属性),需为每类关系单独写一条 LOAD CSV 语句,或通过 Python 动态拼接。

***

## 五、Python 批量导入(推荐自动化)

若从 GraphRAG/LightRAG 输出的 CSV 批量导入,Python 驱动效率更高 :[6][7]

“`python
import pandas as pd
from neo4j import GraphDatabase

driver = GraphDatabase.driver(“bolt://localhost:7687″, auth=(“neo4j”, “password”))

nodes_df = pd.read_csv(“nodes.csv”)
rels_df = pd.read_csv(“relationships.csv”)

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].to_dict(‘records’)
session.execute_write(import_nodes, batch)

# 批量导入关系
for i in range(0, len(rels_df), batch_size):
batch = rels_df.iloc[i:i+batch_size].to_dict(‘records’)
session.execute_write(import_rels, batch)

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`、`Person`、`Book`)设置颜色,直观区分神学概念、人物与著作 。[9]

Sources
[1] Import CSV to Neo4j – CSVBox Blog https://blog.csvbox.io/import-csv-to-neo4j/
[2] Loading csv into neo4j desktop – General https://community.neo4j.com/t/loading-csv-into-neo4j-desktop/75796
[3] Import CSV File into Neo4j Desktop Seamlessly – YouTube https://www.youtube.com/watch?v=sY5spJBOrvU
[4] Fastest way to load data in neo4j using python – Cypher https://community.neo4j.com/t/fastest-way-to-load-data-in-neo4j-using-python/35904
[5] (Neo4j-driver) – How to do batch insert relationship with Python https://stackoverflow.com/questions/57407926/neo4j-driver-how-to-do-batch-insert-relationship-with-python
[6] Adding relationships efficiently. Neo4j – python – Stack Overflow https://stackoverflow.com/questions/78122730/adding-relationships-efficiently-neo4j
[7] How to do large batch insert or upsert nodes and relationship neo4j … https://community.neo4j.com/t/how-to-do-large-batch-insert-or-upsert-nodes-and-relationship-neo4j-using-python-driver/58880
[8] 【Neo4j与知识图谱】Neo4j的常用语法与一个简单知识图谱构建示例 https://blog.csdn.net/QH2107/article/details/129658674
[9] Neo4j Live: Stunning Graph Visualizations with NVL – YouTube https://www.youtube.com/watch?v=uVxhYgWsHZw
[10] Importing CSV Files into Neo4j: A Beginner’s Guide to Cypher and … https://www.youtube.com/watch?v=HWnrQapeDPE
[11] Help with data import and creating a relationship – Cypher https://community.neo4j.com/t/help-with-data-import-and-creating-a-relationship/52593
[12] Loading CSV to neo4j from python – Reddit https://www.reddit.com/r/Neo4j/comments/1e4lo65/loading_csv_to_neo4j_from_python/