Neo4j具有给定属性的任何节点的ShortestPath

时间:2018-03-05 10:34:58

标签: neo4j cypher shortest-path

我正在尝试使用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

有谁知道如何以不同的方式做到这一点?感谢

1 个答案:

答案 0 :(得分:0)

  1. 您的-[:KNOWS]-模式未指定可变长度路径(如-[:KNOWS*..5]-),因此您的shortestpath查询目前仅尝试查找长度为1的路径。这是可能不是你想要的。

  2. 您可能希望尝试使用迭代方法来查找最短路径的单个实例。也就是说,重复执行以下查询(同时递增[:KNOWS*1]模式中的数字,以增加所需的路径长度),直到得到结果:

    MATCH path = (n1:Node {has_ppt: False})-[:KNOWS*1]-(n2:Node {has_ppt: True})
    RETURN n1,n2,length(path)
    LIMIT 1;