在Neo4J中有效地获得子树

时间:2015-02-25 10:40:12

标签: neo4j cypher

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

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

  a
  |
-----
| | | 
b c d
| |
---
 |
 e
 |
 f

并且选择了e节点,我需要绘制:

 a
 |
---
| |  
b c
| |
---
 |
 e

我正在使用此Cypher查询:

start n=node({nodeId}) optional match n-[r:DEPENDS*]->p return n,r,p

虽然它有效,但根据搜索节点的深度,它非常慢(超过10秒)。

¿我怎样才能有效地实现这一目标?

1 个答案:

答案 0 :(得分:0)

您的查询将计算所有路径,而您只对根路径感兴趣。所以在beween中获取根和节点以及最短路径。

MATCH path=shortestPath((root)<-[:DEPENDS*]-(n))
WHERE id(root) = {rootId} and id(n) = {nodeId}
RETURN path