Максимальная глубина двунаправленного бокового селектора Neo4j

У меня есть огромный граф, который плотно связан, и я пытался использовать структуру двунаправленного обхода Neo4j для эффективного обнаружения пути между двумя узлами. Буду признателен, если кто-нибудь сможет объяснить роль maxDepth в методе sideSelector. Единственное объяснение, которое я смог найти, находится в javadoc, и оно очень расплывчато для меня. Описание в javadoc: maxDepth — необязательный параметр максимальной глубины для бокового селектора. Почему максимальная глубина важна для SideSelector? Потому что он знает обе стороны обхода в любой заданной точке.

Как знание глубины влияет на SideSelector?

Мой текущий код выглядит так:

        BidirectionalTraversalDescription description = graphDb.bidirectionalTraversalDescription().
    startSide(graphDb.traversalDescription()
                                .depthFirst()
                                .uniqueness(Uniqueness.NODE_PATH)
                                .expand(new RelsPathExpander(xxxx))
                                .evaluator(Evaluators.toDepth(3))).
    endSide(graphDb.traversalDescription()
                                        .depthFirst()
                                        .uniqueness(Uniqueness.NODE_PATH)
                                        .expand(new RelsPathExpander(xxxx))
.evaluator(Evaluators.toDepth(3)))
                                .collisionEvaluator(new Evaluator() {
                                    @Override
                                    public Evaluation evaluate(Path path) {
                                        return Evaluation.INCLUDE_AND_CONTINUE;
                                    }
                                }).sideSelector(SideSelectorPolicies.LEVEL, 100);

Спасибо!


person graphEnthusiast    schedule 15.07.2015    source источник


Ответы (1)


Как автор частей структуры обхода, я думаю, что помню, что речь идет о сценарии, в котором две стороны не указывают свою максимальную глубину, но вместо этого в боковом селекторе есть одна максимальная глубина. Это позволяет немного более динамичные обходы, когда одна сторона может проходить намного глубже, чем другая, скажем, если бы на одной стороне было меньше взаимосвязей для обхода по сравнению с другой. Этот перекос глубины допускает случаи, когда обход может завершиться с меньшим количеством пройденных отношений, чем если бы обе стороны спускались с одинаковой скоростью. TraversalShortestPath использует эту функцию.

В вашем случае вы должны просто быть в состоянии установить его достаточно высоко, чтобы вместить обе стороны.

person Mattias Finné    schedule 15.07.2015