我已经建立了一个包含40万个节点和与Neo4j的40万个关系的图表。 大多数情况下,我搜索不同的最短路径,查询速度非常快。现在,每个查询通常需要几毫秒。
对于速度,我对关系属性 val 中的所有参数进行编码,因此普通查询如下所示:
MATCH (one:Obj{oid:'1'})
with one
MATCH (two:Obj{oid:'2'}), path=shortestPath((one) -[*0..50]-(two))
WHERE ALL (x IN RELATIONSHIPS(path) WHERE ((x.val > 50 and x.val<109) ))
return path
但是一个过滤器不能这样做,因为它应该评估(在每个步骤)起始节点的属性,关系的属性,结束节点的属性,例如:
Path: n1(==1)-r1(==2)-n2(==1)-r2(==5)-n3(==3)
在第1步:n1和n2的属性等于1,关系的属性等于2,这样就行了,进一步
在步骤2:n2的属性等于1,但是n3的属性等于3,所以我们停止。如果它是1,我们无论如何都会停止,因为关系r2不是2,而是5。
我使用了RELATIONSHIPS和NODES谓词,但它们似乎分开工作。
另外,我想这可以通过遍历API来完成,但是我必须重写我的很多其他代码,所以这是不可取的。
我错过了一些快速解决方案吗?
答案 0 :(得分:0)
看起来您的基本查询运行得非常快。如果要在其他步骤中进行过滤,则可能必须添加其他可选匹配项和语句以适应过滤器。不受欢迎的元素应该退出。