Graph 用cypher检测neo4j性质图中的圈

Graph 用cypher检测neo4j性质图中的圈,graph,neo4j,cycle,cypher,Graph,Neo4j,Cycle,Cypher,使用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 然而,这并不是很有效 有人能提出更好

使用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在找到给定节点的路径后停止。它可能仍然很慢,但肯定不会那么慢