使用Neo4j构建树形结构数据模型

原数据结构如下(csv格式)

entityidentityentitytagpropertyvalueid(父类id)valuevaluetag
1567677479436235642双花草珊瑚含片药品适应证1638862635926913734声音嘶哑临床所见
1638862635926913734声音嘶哑临床所见科室1594101137029016465胸外科组织机构
1594101137029016465胸外科组织机构子类1594101137015432243外科组织机构
1594101137015432243外科组织机构子类1594101137032180015临床科室组织机构
1594101137032180015临床科室组织机构子类1608729910223600623医疗机构业务科室组织机构
1608729910223600623医疗机构业务科室组织机构子类1567677480284502502组织机构组织机构

查询"双花草珊瑚含片"所有子节点(树形结构)

PostgreSQL方式:

导入CSV数据至omaha表,查询语句如下:
with recursive r as
(
  select t1.* from omaha t1 where t1.entityid = '1567677479711342720' 
  union all 
  select t2.* from omaha t2, r where t2.entityid = r.valueid
)

select * from r order by entityid asc;

Neo4j方式

  • 导入CSV格式数据

将csv文件放入neo4j安装目录的import目录下

执行以下CQL导入CSV文件

:auto USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///small2.csv" as row 
MERGE (subNode:医学知识库 {entityId: row.entityId, entity: row.entity, entityTag: row.entityTag}) 
MERGE (parentNode:医学知识库 {entityId: row.valueId, entity: row.value, entityTag: row.valueTag}) 
CREATE  (subNode)-[:MedicalRelation {property: row.property}]->(parentNode);    

创建索引

create index on :医学知识库 (entityId,entity,entityTag); 
  • 查询树形结构节点和关系

找到"双花草珊瑚含片"的第1层关系

MATCH (p:医学知识库 {entity: "双花草珊瑚含片"})-[r:MedicalRelation]->(parent:医学知识库) 
return r,p,parent;

找到"双花草珊瑚含片"的所有关系(任意深度)

MATCH (p:医学知识库 {entity: "双花草珊瑚含片"})-[r:MedicalRelation*1..7]->(a:医学知识库)  
RETURN p,r,a;

查询结果如下图

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值