虽然很容易获得到末端节点的距离,但要获得最后一个关系以及想要的结果,将很难(可能不可能?)由于关系可能会被多次遍历,这取决于图的连通性,并且由于相同的关系将作为不同长度路径的最后一个关系出现。
如果您确实需要这个,那么您可以使用
APOC path expander procedures
确保每个关系只遍历一次,因此结果不会是相同的关系,而是针对不同的路径。
下面是一个使用示例,可以为您提供所需的结果:
MATCH (n:Person {name:"A"})
CALL apoc.path.expandConfig(n, {uniqueness:'RELATIONSHIP_GLOBAL', minLevel:1, maxLevel:9, labelFilter:'>Person'}) YIELD path
WITH last(relationships(path)) as rel, length(path) as distanceFromAtoEndnode
RETURN rel {startNode:startNode(rel).name, endNode:endNode(rel).name, rel:type(rel)} as rel, distanceFromAtoEndnode
对于纯Cypher解决方案,您可能会在高度连通的图上挂起,因为Cypher的扩展试图找到所有可能的路径。但给你。
要查找所有连接节点的最短距离,请执行以下操作:
MATCH path=(:Person {name:"A"})-[*1..9]-(other:Person)
RETURN other, min(length(path)) as shortestDistance
并查找连接所有连接节点的所有关系:
MATCH path=(:Person {name:"A"})-[*1..9]-(:Person)
WITH distinct last(relationships(path)) as rel
RETURN rel {startNode:startNode(rel).name, endNode:endNode(rel).name, rel:type(rel)} as rel