2017-01-09 3 views
1

У меня есть база данных, организованная в нескольких иерархических деревьях. Узлы организованы по номерам. Ноды, начинающиеся с того же числа, взаимосвязаны отношениями. Например: (5) - [connect] - (50) - [connect] - (507) ... и т. Д. Я хочу искать, например, узел 301, начиная с первого родительского узла: узел 3. Как я делаю этот запрос в cypher?Поиск в иерархическом дереве на neo4j

ответ

1

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

MATCH (n {number:1})-[:CONNECT*0..]->(n1) return n, n1; 

поиска Этого запроса для узла с имуществом number = 1 и ищут для всех детей, которые связаны через CONNECT отношения. Если вы хотите найти конкретный дочерний узел вы должны изменить запрос таким образом:

MATCH (n {number:1})-[:CONNECT*0..]->(n1 {number:101}) return n, n1; 

В *0.. части вы не можете определить до какой глубины вы хотите найти, так что вы можете также искать глубину = п с *0..n. Эта документация является хорошим местом для начала с предложения о матче/пути: https://neo4j.com/docs/developer-manual/current/cypher/clauses/match/

+0

Большое спасибо! Это решит мою проблему :) –

+0

Как выполнить поиск по ширине? –

+0

Пожалуйста, взгляните на https://neo4j.com/blog/graph-search-algorithm-basics/. Вы найдете там полезную информацию. Вы также можете посмотреть https://github.com/neo4j-contrib/neo4j-apoc-procedures, который имеет реализацию Алгоритма Дейкстры. –

Смежные вопросы