使用密码算法检测 neo4j 属性图中的圈

hrirmatl  于 2022-10-01  发布在  其他
关注(0)|答案(2)|浏览(156)

使用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

然而,事实证明,这并不是非常有效。

有人能建议一个更好的方法来做这件事吗?

ih99xse1

ih99xse11#

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

5)如果仍有未标记的节点,则至少有1个周期

循环将位于未标记的节点集中
查看边最少[In|Out]的节点可能会有所帮助
如果仍然有太多的周期无法识别

xuo3flqw

xuo3flqw2#

您目前使用的查询将返回每个节点的所有路径。将其更改为

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

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

相关问题