Neo4j Использование собственного оценщика для получения глубины, на которой был найден узел

Я использую последнюю версию Neo4j для построения графа узлов и отношений с Java API.

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

Я попытался создать собственный Evaluator, реализовав интерфейс Evaluator, но единственный метод, который он переопределяет, это Evaluation evaluate(Path path), Похоже, с ним не связано понятие глубины.

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

3 ответа

Решение

Вы можете использовать Evaluators.atDepth(), чтобы получить предопределенный Evaluator, который включает только пути с определенной глубиной.

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

Evaluation evaluate(Path path) {
    return path.length() == 4 ? Evaluation.INCLUDE_AND_PRUNE : Evaluation.EXCLUDE_AND_CONTINUE);
}

Путь имеет длину (), которая является глубиной. Длина равна количеству связей в пути, т.е. количество узлов - 1.

Вы пробовали Cypher для этого, что-то вроде

start n = node(1) match p=n-[*4]->(x) return x, length(p) 

?

Другие вопросы по тегам