Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 用cypher检测neo4j性质图中的圈_Graph_Neo4j_Cycle_Cypher - Fatal编程技术网

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