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)
?