Noe4j:根节点​​的高度

Noe4j: height of a root node

我使用的是 Neo4j 3.5 版本

我想计算关系(p:Person)-[r:CHILD*0..]->(c:Person)中节点'p'的高度。

节点的高度定义为根节点和距根节点距离最大的叶节点之间的距离。

我想使用 apoc 程序计算 > 100 000 个节点。谁能建议我应该如何解决这个问题。

我已经弄明白了:

MATCH k = (p:Person)-[r:CHILD*0..]->(c:Person) 
where p.name = "Krishna"
with p, collect(length(k)) as score
unwind score as e
return p.code, max(e) as score

这里,

k是每条路径的长度

collect(length(k)) 列出每个根节点到子节点的路径长度

unwind会用来遍历list的每个元素

然后使用max函数我们可以计算出最远的子节点距离

以下可能是最直接的查询。它确保每个匹配路径的最后一个节点是叶节点,然后 returns 路径的长度。不需要 APOC。

MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score

我假设 CHILD 关系总是指向 Person,因此为了提高效率,我在上述查询中将该标签留在了结束节点之外。

[更新]

如果你只想要最大路径长度的路径,你可以这样做:

MATCH k = (p:Person)-[:CHILD*0..]->(c)
WHERE NOT (c)-[:CHILD]->()
RETURN p.code, LENGTH(k) AS score
ORDER BY score DESC LIMIT 1