计算两个节点及其最低共同祖先(LCA)之间的距离

时间:2019-04-04 22:51:22

标签: neo4j cypher

我需要计算在图中将两个节点A和B与它们的最低共同祖先分开的距离。我使用followinf函数查找LCA:

match p1 = (A:Category {idCat: "Main_topic") -[*0..]-> (common:Category) <-[*0..]- (B:Category {idCat: "Heat_transfer"}) 
return common, p1

Neo4j中是否有任何函数可以返回d(A,common)和d(B,common)之间的距离。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果我正确地理解了lowest common ancestor,这归结为找到AB之间的最短路径,并且在它们之间至少有一个节点。您可以使用此查询来完成。在此,p的长度大于1的条件将迫使这两个节点之间至少有一个节点。下面的示例使用IMDB toy database并返回电影头像。

match p=shortestPath((n:Person {name:'Zoe Saldana'})-[r*1..15]-(n1:Person {name:'James Cameron'})) where length(p) > 1 return nodes(p)[1]

基本上,您可以从路径的节点中选择任何元素,除了第一个和最后一个元素(因为它们分别是AB