在森林中寻找子树

时间:2019-07-02 12:36:02

标签: neo4j

我是neo4j的新手,正在尝试为项目构建概念验证。我的基本问题是,给定一个图,如果选择一个根节点,如何找到图中位于它下方的所有子节点。我不想返回任何父节点

我一直在研究某些apoc功能,但没有成功。

例如

MATCH (x{id:1})
CALL apoc.path.subgraphAll(x,{relationshipFilter:'PARENT[>]'}) YIELD nodes, 
relationships
RETURN nodes, relationships

MATCH (x{id:1})
CALL apoc.path.subgraphNodes(x,{relationshipFilter:'[<]PARENT'}) YIELD node
RETURN node

我希望它能奏效,但显然我在概念上误解了。

在以下测试案例中

CREATE (r:root)
FOREACH (i IN range(1,5)|
         CREATE (r)-[:PARENT]->(c:child { id:i }));


MATCH (c:child)
     FOREACH (j IN range(1,5)|
        CREATE (c)-[:PARENT]->(:child { id:c.id*10+j }));

MATCH (c:child)
     FOREACH (j IN range(1,5)|
        CREATE (c)-[:PARENT]->(:child { id:c.id*10+j }));

如果我想将根节点设置为节点5,则尝试返回5,51,52,53,54,55,然后还返回所有子节点。 511至555

1 个答案:

答案 0 :(得分:0)

对于其中一个,您应该始终在查询中使用标签(因为如果您已经在给定标签+属性上创建了索引,则可以使用索引进行查找)。

否则,查询看起来非常正确,除了关系过滤器中有一个小问题:

relationshipFilter:'[<]PARENT'不需要方向周围的括号。在文档中,它们表示方向是可选的,但是括号本身不应该包含在字面上。

尝试一下:

MATCH (x:child {id:1})
CALL apoc.path.subgraphNodes(x,{relationshipFilter:'<PARENT'}) YIELD node
RETURN node