Neo4j - извлечь все подграфы из базы данных neo4j - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть вопрос, аналогичный тому, который был задан здесь , однако предложенное решение не сработало для меня.

В моей базе данных Neo4j есть много подграфов, каждый из которых содержит различное количество узлов.

Я хотел бы извлечь какой-то список, который будет содержать все подграфы, разделенные.

enter image description here

В данном примере я хотел бы получить 3 группы, где каждая группа содержит все узлы в подграфе, который представляет группа.

Как получить все группы узлов по запросу Cypher?

Все решения, которые я нашел для этой проблемы, требуют наличия корневого узла, которого у меня нет в этом случае.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете использовать графические алгоритмы плагин и, в частности, алгоритм подключенных компонентов , чтобы пометить все изолированные подграфы в вашем графе, а затем экспортировать их и сгруппировать их позже при экспорте по заданному идентификатору.

Пример:

enter image description here

создать примерный график

MERGE (nAlice:User {id:'Alice'})
MERGE (nBridget:User {id:'Bridget'})
MERGE (nCharles:User {id:'Charles'})
MERGE (nDoug:User {id:'Doug'})
MERGE (nMark:User {id:'Mark'})
MERGE (nMichael:User {id:'Michael'})

MERGE (nAlice)-[:FRIEND]->(nBridget)
MERGE (nAlice)-[:FRIEND]->(nCharles)
MERGE (nMark)-[:FRIEND]->(nDoug)
MERGE (nMark)-[:FRIEND]->(nMichael);

Запуск подключенных компонентов(unionFind) алгоритм и возврат узлов в одном и том же подграфе:

CALL algo.unionFind.stream('User', 'FRIEND', {})
YIELD nodeId,setId
RETURN setId,collect(algo.getNodeById(nodeId)) AS nodes_from_specific_subgraph

Это вернет:

╒═══════╤══════════════════════════════════════════════════╕
│"setId"│"specific_subgraph"                               │
╞═══════╪══════════════════════════════════════════════════╡
│4      │[{"id":"Doug"},{"id":"Mark"},{"id":"Michael"}]    │
├───────┼──────────────────────────────────────────────────┤
│0      │[{"id":"Alice"},{"id":"Bridget"},{"id":"Charles"}]│
└───────┴──────────────────────────────────────────────────┘
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...