我正在尝试使用Neo4j中的ShortestPath。 我想为每个节点找到它到达具有给定属性的任何节点的最短路径。
换句话说,对于任何节点n1,我想要到任何节点n2的最短路径的最小长度,n2具有特定属性。
我目前使用以下查询,但我认为它是低效的,因为它必须计算n1和n2之间的所有最短路径。更聪明的方法是在我们找到length(path)==1
的路径后立即停止查看。
MATCH path = shortestpath((n1:Node {has_ppt: False})-[:KNOWS]-(n2:Node {has_ppt: True}))
RETURN n1,n2,length(path)
LIMIT 5
有谁知道如何以不同的方式做到这一点?感谢
答案 0 :(得分:0)
您的-[:KNOWS]-
模式未指定可变长度路径(如-[:KNOWS*..5]-
),因此您的shortestpath
查询目前仅尝试查找长度为1的路径。这是可能不是你想要的。
您可能希望尝试使用迭代方法来查找最短路径的单个实例。也就是说,重复执行以下查询(同时递增[:KNOWS*1]
模式中的数字,以增加所需的路径长度),直到得到结果:
MATCH path = (n1:Node {has_ppt: False})-[:KNOWS*1]-(n2:Node {has_ppt: True})
RETURN n1,n2,length(path)
LIMIT 1;