获取neo4j上从一个节点到另一个节点的最短路径列表?

时间:2017-06-04 00:12:16

标签: neo4j cypher

我需要在两个节点之间找到短路,获取路径的所有关系(带属性)的列表。

如果我有这样的话:

MERGE (p1:Person{name: 'jim'})
MERGE (p2:Person{name: 'rob'})
MERGE (p3:Person{name: 'tom'})
MERGE (p4:Person{name: 'bob'})  

MERGE (p1)-[:FRIEND{age: '20'}]->(p2)
MERGE (p2)-[:NO_FRIEND{age: '35'}]->(p3)
MERGE (p3)-[:FRIEND{age: '20'}]->(p4)
MERGE (p2)-[:FOO{age: '40'}]->(p4)

假设我需要从p1转到p4,结果列表应该是一个列表: FRIEND {age:'20'}和FOO {age:'40' }

如果我需要从p1转到p3,结果应为 FRIEND {age:'20'}和NO_FRIEND {age:'35'} < / p>

所以我有两个要求,短路,以及带有关系的列表。我该怎么办?

1 个答案:

答案 0 :(得分:1)

听起来你只需要使用shortestPath函数并返回结果路径(它将为您提供路径上的节点和关系及其属性)。例如,要获得从p1p4节点的最短路径:

MATCH path=shortestPath((p1:Person {name: 'jim'})-[*]-(p4:Person {name: 'bob'}))
RETURN path;

如果要查找路径长度相同的所有路径,可以使用allShortestPaths函数。