繁体   English   中英

使用cypher检测neo4j属性图中的循环

[英]Detecting cycles in neo4j property graph using cypher

使用密码检测相当大的图形中的循环的最佳方法是什么。

我有一个图表,它有大约250000个节点和大约270000个关系,我想检测大约10k节点的子图中的周期并涉及100k关系。 我写的密码就像

start 
      n = node:node_auto_index(some lucene query that returns about 10k nodes)

match
    p =  n-[:r1|r2|r3*]->n
return p

然而,这并不是非常有效。

有人可以建议一个更好的方法来做到这一点。

1)计算未标记的节点
2)没有传出关系的标志节点(叶子)
3)没有传入关系的标志节点(根)
4)如果任何节点在2或3中被标记,则返回步骤1

5)如果未标记的节点仍然存在,则至少有一个周期

循环将在未标记的节点集中
查看具有最少[in | out]边缘的节点可能会有所帮助
如果仍然有太多的识别周期

您当前使用的查询将返回每个节点的所有路径。 把它改成

start 
      n = node:node_auto_index(some lucene query that returns about 10k nodes)
where (n)-[*]->(n)
return distinct p, n

一旦找到给定节点的路径,Neo4j就会停止。 它可能仍然会很慢,但肯定不那么慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM