Визуализация подключенных компонентов в Neo4j - PullRequest
0 голосов
/ 31 января 2019

Я могу найти самый высокий плотно связанный компонент на графике, используя код ниже:

CALL algo.unionFind.stream('', ':pnHours', {})
YIELD nodeId,setId
// groupBy setId, storing all node ids of the same set id into a list
MATCH (node) where id(node) = nodeId
WITH setId, collect(node) as nodes
// order by the size of nodes list descending
ORDER BY size(nodes) DESC
LIMIT 1 // limiting to 3
RETURN nodes;

Но это не помогает мне визуализировать самый верхний плотно связанный компонент (подграф), потому что выходной граф этоиспускает непересекающиеся узлы.Можно ли визуализировать плотно связанный компонент.Если да, то как

enter image description here

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Если вы хотите визуализировать, то в браузере Neo4j используйте:

CALL algo.unionFind.stream('', ':pnHours', {})
YIELD nodeId,setId
// groupBy setId, storing all node ids of the same set id into a list
MATCH p=(node)-->() where id(node) = nodeId
WITH setId, collect(p) as paths
// order by the size of nodes list descending
ORDER BY size(paths) DESC
LIMIT 1 // limiting to 3
// Maybe you need to unwind paths to be able to visualize in Neo4j browser
RETURN paths;

Это не самый оптимизированный запрос, но он отлично подойдет для небольших наборов данных.

0 голосов
/ 01 февраля 2019

Следующий запрос должен возвращать все одношаговые пути в самом большом pnHours -связанном компоненте (то есть в том, который имеет наибольшее количество узлов).Он получает только пути для самого большого компонента.

CALL algo.unionFind.stream(null, 'pnHours', {}) YIELD nodeId, setId
WITH setId, COLLECT(nodeId) as nodeIds
ORDER BY SIZE(nodeIds) DESC
LIMIT 1
UNWIND nodeIds AS nodeId
MATCH path = (n)-[:pnHours]->()
WHERE ID(n) = nodeId
RETURN path

Визуализация результатов в графике браузера neo4j покажет все узлы в компоненте и их отношения.

0 голосов
/ 31 января 2019

Я пробовал этот запрос, но я получаю другой результат.

Я не использовал эти алгоритмы и не очень разбираюсь в этом, но я думаю, что вы добавили в запрос дополнительный символ (двоеточие).

Можете ли вы проверить с помощью pnHours вместо : pnHours .

Я удаляю двоеточие (:) из запроса и получаю правильный результат (также я могу получить отношения также, потому чтоБраузер Neo4j извлекает его, хотя он не указан в запросе).

Если вы все еще не получили, проверьте следующий запрос:

CALL algo.unionFind.stream('', 'pnHours', {})
YIELD nodeId,setId
// groupBy setId, storing all node ids of the same set id into a list
MATCH (node) where id(node) = nodeId
WITH setId, collect(node) as nodes
// order by the size of nodes list descending
ORDER BY size(nodes) DESC
LIMIT 1 // limiting to 3
WITH nodes
UNWIND nodes AS node
MATCH (node)-[r:pnHours]-()
RETURN node,r;
...