2017-02-02 14 views
1

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

(node1)-[:CONNECTS]->(node2) 

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

MATCH (n:Label1)-[r:CONNECTS*1..]-(m) 
WHERE n.name = 'startNodeString' 
RETURN n,r,m 

Ниже запрос будет возвращать только первый уровень дочерних узлов для данного корневого узла:

MATCH (cs:Label1)-[r:CONNECTS*]->(es:Label2) 
WHERE cs.property = 'startNodeString' 
RETURN cs,es,r 

Я хотел бы захватить начало от корневого узла, проходящего через каждый дочерний узел, и рекурсивно каждый дочерний узел до глубины каждого уровня, т.е. уровня «n».

Цените свою помощь в запросе cypher.

ответ

1

Для этого необходимо APOC Procedures, в частности path expander.

Вот пример использования:

MATCH (cs:Label1) 
WHERE cs.property = 'startNodeString' 
CALL apoc.path.expandConfig(cs,{relationshipFilter:"CONNECTS>",maxLevel:3,uniqueness:"NODE_GLOBAL"}) YIELD path 
WITH cs, RELATIONSHIPS(path) as r, LAST(NODES(path)) as es 
WHERE es:Label2 
RETURN cs,es,r 

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

+0

Невозможно вызвать процедуру apoc после ее установки под $ NEO4J_HOME/плагинами и перезапустимым сервером; Я получаю следующую ошибку из оболочки> neo4j-sh (?) $ CALL dbms.procedures() > Неизвестная команда 'call' –

+0

Какая версия Neo4j у вас запущена? Версии 3.0 и выше должны поддерживать ключевые слова CALL и созданные пользователем процедуры. Лучше использовать версию 3.1.x. – InverseFalcon

+0

Теперь я работаю над MacOS с версией 3.1.1; создать моментальный снимок из последнего кода и скопировать его в каталог плагинов:/Приложения/Neo4j \ Community \ Edition.app/Contents/Resources/app/plugins/; также попытался скопировать банку в каталог: $ NEO4J_HOME/плагины Я получаю следующую ошибку при запуске сервера: Запуск Neo4j не удалось: компонент «org.[email protected]» был успешно инициализирован, но не смог запустить. См. Прилагаемое исключение причины. –