【发布时间】:2023-03-04 16:36:01
【问题描述】:
我将统一医学语言系统 (UMLS) 本体加载到 Neo4j 中,以及 SNOMED 概念节点之间的关系。任何两个节点之间可以有多种类型的关系。 UMLS 的 2015AA 版本和我选择的选项产生了 1,256,982 个 SNOMED 节点和它们之间的 2,258,642 个关系。此查询会产生 SNOMED 根节点的预期 21 个子节点:
MATCH (n:MRCONSO{AUI:'A3684559'}) match n<-[*..1]-x return count(*)
增加查询的深度会导致问题。此查询在返回中产生 3338 行
MATCH (n:MRCONSO{AUI:'A3684559'}) match n<-[*..2]-x return id(x)
有 11 行的 id 不是唯一的。这也可以在这个查询中看到,它产生 3327 行 (3338-11)
MATCH (n:MRCONSO{AUI:'A3684559'}) match p=shortestpath(n<-[*..2]-x) return id(x)
因此,我可以使用最短路径获取唯一的子节点 ID。但是,第二次和第三次查询的查询时间分别为 52 毫秒和 61745 毫秒。这些中的任何一个都会随着更深入的查询而恶化。
有没有办法避免查询中的循环,从而减少查询时间?
【问题讨论】: