在Neo4J中高效地获取子树

在Neo4J中高效地获取子树,neo4j,cypher,Neo4j,Cypher,我有一棵树,大约有300个节点。对于任意节点,我需要从该节点到根(包括所有可能的路径)绘制子树 例如,如果我有此树(已编辑): 如果选择了e节点,我需要绘制: a | --- | | b c | | --- | e 我正在使用此密码查询: start n=node({nodeId})可选匹配n-[r:dependens*]->p返回n,r,p 虽然它可以工作,但取决于搜索节点的深度,速度非常慢(超过10秒) ?如何有效地实现这一点?您的查询将计算所有路径,而您也只对根目录下的一条路

我有一棵树,大约有300个节点。对于任意节点,我需要从该节点到根(包括所有可能的路径)绘制子树

例如,如果我有此树(已编辑):

如果选择了
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