Как выполнить поиск в ширину с разбивкой по страницам, используя Neo4J Cypher? - PullRequest
0 голосов
/ 09 июля 2019

Как выполнить поиск в ширину с разбивкой по страницам, используя Neo4J Cypher?

Например, у меня есть следующие вершины

Vertex A, Vertex B1, B2, B3, ...., Bn (m B вершин), Vertex C1, C2, C3, ..., Cn (n C вершин) и Vertex D1, D2, D3, ..., Dn (k D вершин)

Теперь A является корнем, и все дочерние элементы A являются B-вершинами, и для каждой B-вершины есть n C вершин в качестве детей, и, наконец, для каждой C-вершины есть K D вершин в качестве детей. поэтому направление просто сверху вниз.

Теперь я хочу выяснить все вершины, начиная, скажем, с вершины C1, и выполнять BFS в разбивке по страницам, потому что график огромен. Любая идея, как сделать это с помощью Cypher?

1 Ответ

1 голос
/ 09 июля 2019

Имейте в виду, что порядок не гарантируется, если у вас нет предложения ORDER BY.

Кроме того, расширения Cypher используют DFS по умолчанию, только использование shorttestPath () и shorttestPath () делает BFS, и они не 't применимо для этого случая.

Вы можете лучше контролировать поведение расширения, используя API обхода, который можно использовать из хранимой процедуры.К счастью, Процедуры APOC уже сделали это для вас в своих процедурах расширителя пути и по умолчанию используют BFS.

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

Предположим, что ваш график имеет только исходящие отношения от корня до листа.В этом случае вот пример использования:

MATCH (start:Vertex {name:$startVertex})
CALL apoc.path.subgraphNodes(start, {relationshipFilter:'>'}) YIELD node
RETURN node
SKIP $skip
LIMIT 100

Вы можете передать startVertex и skip в качестве параметров при вызове запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...