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

entityidentityentitytagpropertyvalueid(父类id)valuevaluetag1567677479436235642双花草珊瑚含片药品适应证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;

查询结果如下图

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: