Neo4j具有给定属性的任何节点的ShortestPath
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j具有给定属性的任何节点的ShortestPath相关的知识,希望对你有一定的参考价值。
我正在尝试使用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
有谁知道如何以不同的方式做到这一点?谢谢
答案
- 你的
-[: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;
以上是关于Neo4j具有给定属性的任何节点的ShortestPath的主要内容,如果未能解决你的问题,请参考以下文章