Нахождение поддерева в лесу - PullRequest
1 голос
/ 02 июля 2019

Я новичок в 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 голосов
/ 02 июля 2019

Например, вы всегда должны использовать метки в своих запросах (так как это позволяет вам использовать индекс для поиска, если вы создали индекс для данной метки + свойство / свойства).

В противном случае запрос выглядит ПОЧТИ почти правильно, за исключением небольшой проблемы в вашем фильтре отношений:

relationshipFilter:'[<]PARENT' Скобки вокруг направления не нужны. В документации они обозначают, что направление является необязательным, но сами скобки не должны быть буквально включены.

Попробуйте это:

MATCH (x:child {id:1})
CALL apoc.path.subgraphNodes(x,{relationshipFilter:'<PARENT'}) YIELD node
RETURN node
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...