【发布时间】:2015-05-22 14:49:32
【问题描述】:
下面的查询试图在一个本体中查找一个概念的所有子类型。一旦识别了所有概念,查询将尝试识别层次结构中定义为“原始”(属性定义StatusId)并且具有定义为“完全定义”的超类型和子类型概念的所有概念(使用相同的属性定义StatusId) .
层次结构中的概念数为 101,000(几百万条路径),“原始”概念总数 = 56,000,非叶节点基元总数 = 13,000。
执行查询时 webadmin 挂起。所以,显然写得不好。我试图在每一步都缩小查询的范围,但我肯定做得不对!
建议?
//Find all clinical finding subtypes
MATCH (a:ObjectConcept{sctid:404684003})<-[:ISA*]-(b:ObjectConcept)
with collect (DISTINCT b) as set1
//Find all primitive subtypes of clinical findings
UNWIND set1 as x1
MATCH x1
WHERE x1.definitionStatusId = 900000000000074008
with collect (DISTINCT x1) as prim,set1
//Find all fully-defined subtypes of clinical findings
UNWIND set1 as x2
MATCH x2
WHERE x2.definitionStatusId = 900000000000073002
with collect (DISTINCT x2) as full, prim
//Find all primitives with a fully-defined subtype
UNWIND prim as prim1
UNWIND full as full1
MATCH prim1,full1
WHERE EXISTS((prim1)<-[:ISA*]-(full1)) as prim11
with collect (DISTINCT prim11) as intprim, full1
//Find all high level primitives with a fully-defined supertype
UNWIND intprim as intprim1
MATCH intprim1,full1
WHERE EXISTS((full1)<-[:ISA*]-(intprim1)) as intprim11
with collect (DISTINCT intprim11) as intprim2
//Find all high level primitives with fully defined supertypes
//that also have fully defined subtypes
UNWIND intprim2 as intprim22
return intprim22.sctid,intprim22.FSN
【问题讨论】:
-
嗨,斯科特,有几件事:你能分享你的数据库吗?你能尝试更好地命名你的变量吗?为什么不早点过滤
definitionStatusId?不需要 MATCH (x1)。否则马丁说的:)