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
我使用的是 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