一’、nodes_unified.csv和relationships_unified.csv放入 Neo4j 的 import 目录。(也就是自己的节点数据和关系数据)
一般import在C、D盘(自己的盘)里面的找到neo4j-community-2025.01.0
二、清空数据库中已有的旧数据(可选)
🚨 警告:执行此操作会永久删除所有数据,且不可逆。强烈建议在执行前先备份数据库!
如果数据库是全新的,可以跳过这一步。否则执行:
MATCH (n) DETACH DELETE n;作用:删除所有节点和关系,从头开始。
三、查看 CSV 文件的结构(确认列名)
节点文件预览:
LOAD CSV WITH HEADERS FROM 'file:///nodes_merged.csv' AS row RETURN row LIMIT 5;关系文件预览:
LOAD CSV WITH HEADERS FROM 'file:///relationships_merged_all.csv' AS row RETURN row LIMIT 5;记下列名(例如:
global_id、name、:LABEL、:START_ID、:END_ID、:TYPE等)。
四、导入节点
LOAD CSV WITH HEADERS FROM 'file:///nodes_merged.csv' AS row CREATE (n:MedicalEntity { global_id: row.global_id, code: row.id, name: row.name, original_label: row[":LABEL"], category: row.category, description: row.description });解释:
MedicalEntity是自定义的节点标签(可改成你喜欢的名字)。列名带冒号(如
:LABEL)需要用方括号访问:row[":LABEL"]。可以根据需要添加更多属性(如
findings,for_disease等)。
执行成功后会出现提示:Added 1091 labels, created 1091 nodes。
五、创建索引(加速查询和关系匹配)
在唯一标识上创建约束(会自动建立索引):
CREATE CONSTRAINT FOR (n:MedicalEntity) REQUIRE n.global_id IS UNIQUE;六、导入关系
LOAD CSV WITH HEADERS FROM 'file:///relationships_merged_all.csv' AS row MATCH (source:MedicalEntity {global_id: row[":START_ID"]}) MATCH (target:MedicalEntity {global_id: row[":END_ID"]}) CREATE (source)-[:RELATED { type: row[":TYPE"], stage: row.stage, outcome: row.outcome }]->(target);解释:
[:RELATED]是统一的关系类型(因为不能动态创建不同类型)。原始的关系类型(如
TREATS、PREVENTS)被保存在关系属性type中。可以根据需要添加更多关系属性(如
description,source等)。
执行成功后提示:Created X relationships。
七、验证数据是否正确
统计节点数量:
MATCH (n:MedicalEntity) RETURN count(n);统计关系数量:
MATCH ()-[r:RELATED]->() RETURN count(r);查看任意一个节点:
MATCH (n:MedicalEntity) RETURN n LIMIT 1;查看任意一条关系:
MATCH ()-[r:RELATED]->() RETURN r LIMIT 1;八、简单查询示例(在 Neo4j Browser 中体验图谱可视化)
查看某个中心节点(例如
N000341)的所有邻居(图形化展示)MATCH (n:MedicalEntity {global_id: "N000341"})-[r]-(m) RETURN n, r, m LIMIT 50;统计每种关系类型的数量
MATCH ()-[r:RELATED]->() RETURN r.type, count(*) ORDER BY count(*) DESC;查找所有“治疗”关系(
TREATS)MATCH (s)-[r:RELATED {type: "TREATS"}]->(t) RETURN s.name, t.name LIMIT 20;