我将统一医学语言系统(UMLS)本体加载到Neo4j以及SNOMED概念节点之间的关系。任何两个节点之间可以存在多种类型的关系。 UDAS的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 ms和61745。随着更深层次的询问,其中任何一个都会恶化。
有没有办法避免查询中的循环,从而缩短查询时间?
答案 0 :(得分:0)
您使用的是哪个版本的Neo4j?尝试更新到2.2.2
您是否能够确定获得这些重复ID的原因? 可能是一个孩子可以在两个层面上到达
此外,您的查询将同时输出1级和2级孩子。
您可以输出某个重复ID的所有路径吗?
获得唯一ID是否足够好?然后你可以使用distinct。
MATCH (n:MRCONSO{AUI:'A3684559'})
MATCH (n)<-[*..2]-(x)
RETURN distinct id(x)
您在:MRCONSO(AUI)
上有索引或约束吗?