Neo4j双向遍历侧选器最大深度

时间:2015-07-15 01:35:36

标签: neo4j graph-traversal

我有一个密集连接的巨大图形,我一直在尝试使用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);

谢谢!

1 个答案:

答案 0 :(得分:1)

作为遍历框架的一部分的作者,我想我记得它是关于一个双方没有指定自己的最大深度的情况,而是在那里有一个最大深度侧选择器。这允许更多的动态遍历,其中一方可以比另一方更深,例如,与另一方相比,一侧的关系较少。这种深度偏斜允许遍历可以完成与遍历的关系较少的情况,而不是双方以相同的速率下降。 TraversalShortestPath使用此功能。

在您的情况下,您应该能够将其设置得足够高以容纳双方。