我怎样才能优化这个密码查询?

时间:2017-07-04 10:19:32

标签: neo4j cypher neo4jclient

当我使用此密码查询时

match p=(n)-[r*8]-(n) 
where id(n)=548  
with p 
where ALL(x IN nodes(p)[1..length(p)] WHERE SINGLE(y IN nodes(p)[1..length(p)] WHERE x=y))  
return count(p)

返回结果需要51922 ms;真的很长一段时间。我怎样才能优化这个密码查询?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

看起来你想要一个没有重复节点的简单电路(开始和结束节点除外)。

APOC Procedure来获取两个节点之间的所有简单路径,具有最大路径长度。当起始节点和结束节点相同时,它当前不起作用,但是如果我们将结束节点设置为起始节点的任何相邻节点,并且过滤为仅保留长度为7的路径(因为路径排除了最后一个节点)跳回到起始节点),然后我们应该能够非常快速地得到正确的答案。

match (n)--[m]
with distinct n, m
call apoc.algo.allSimplePaths(n, m, '', 7) YIELD path
with path
where length(path) = 7
return count(path)