在Neo4J中高效地获取子树
我有一棵树,大约有300个节点。对于任意节点,我需要从该节点到根(包括所有可能的路径)绘制子树 例如,如果我有此树(已编辑): 如果选择了在Neo4J中高效地获取子树,neo4j,cypher,Neo4j,Cypher,我有一棵树,大约有300个节点。对于任意节点,我需要从该节点到根(包括所有可能的路径)绘制子树 例如,如果我有此树(已编辑): 如果选择了e节点,我需要绘制: a | --- | | b c | | --- | e 我正在使用此密码查询: start n=node({nodeId})可选匹配n-[r:dependens*]->p返回n,r,p 虽然它可以工作,但取决于搜索节点的深度,速度非常慢(超过10秒) ?如何有效地实现这一点?您的查询将计算所有路径,而您也只对根目录下的一条路
e
节点,我需要绘制:
a
|
---
| |
b c
| |
---
|
e
我正在使用此密码查询:
start n=node({nodeId})可选匹配n-[r:dependens*]->p返回n,r,p
虽然它可以工作,但取决于搜索节点的深度,速度非常慢(超过10秒)
?如何有效地实现这一点?您的查询将计算所有路径,而您也只对根目录下的一条路径感兴趣。因此,得到根和节点以及beween中的最短路径
MATCH path=shortestPath((root)<-[:DEPENDS*]-(n))
WHERE id(root) = {rootId} and id(n) = {nodeId}
RETURN path
MATCH path=shortestPath((root)你的树有多深?你使用哪个Neo4j版本?我使用的是Neo4j 2.1.0,最糟糕的情况是深度约为20级,但我需要所有可能的根路径,以便绘制子树。我将澄清我的示例。然后改用AllShortestpath。
MATCH path=shortestPath((root)<-[:DEPENDS*]-(n))
WHERE id(root) = {rootId} and id(n) = {nodeId}
RETURN path