原数据结构如下(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;
查询结果如下图
推荐阅读
发表评论