其中 find PathFinder 的所有路径在 apoc 过程存储库中被覆盖



我正在尝试为Dijkstra的搜索添加一个maxDepth。我查看了apoc过程存储库源代码,发现它们在WeightedPathResult.streamWeightedPathResult中将PathFinder与startNode和enNode一起传递,该Result调用PathFinder接口的findAllPaths方法来查找所有路径。我需要更改 findAllPath 方法中的代码,以便在 path.length((>maxDepth 时中断搜索,但问题是我找不到此方法在任何文件中覆盖。以下是 APOC Dijkstra 过程的片段 @Procedure @Description("apoc.algo.dijkstra(startNode, endNode, 'KNOWS|<WORKS_WITH|IS_MANAGER_OF>', 'distance', defaultValue, numberOfWantedResults) YIELD path," + " weight - run dijkstra with relationship property name as cost function")

 public Stream<WeightedPathResult> dijkstra(
        @Name("startNode") Node startNode,
        @Name("endNode") Node endNode,
        @Name("relationshipTypesAndDirections") String relTypesAndDirs,
        @Name("weightPropertyName") String weightPropertyName,
        @Name(value = "defaultWeight", defaultValue = "NaN") double defaultWeight,
        @Name(value = "numberOfWantedPaths", defaultValue = "1") long numberOfWantedPaths) {PathFinder<WeightedPath> algo = GraphAlgoFactory.dijkstra(
            buildPathExpander(relTypesAndDirs),
            (relationship, direction) -> Util.toDouble(relationship.getProperty(weightPropertyName, defaultWeight)),
            (int)numberOfWantedPaths
    );
    return WeightedPathResult.streamWeightedPathResult(startNode, endNode, algo);
}

这是 streamWeightedPathResult 方法

 public static Stream<WeightedPathResult> streamWeightedPathResult(Node startNode, Node endNode, PathFinder<WeightedPath> algo) {
    Iterable<WeightedPath> allPaths = algo.findAllPaths(startNode, endNode);
    return StreamSupport.stream(allPaths.spliterator(), false)
            .map(WeightedPathResult::new);
}}

他们从 PathFinder 接口调用 findAllPath 方法,但它没有被覆盖,所以我在哪里可以对此方法进行更改?

findAllPaths() 方法是在 neo4j 库中实现的,而不是在 APOC 代码中实现的。

如您的代码片段所示,该特定algo实例由这个重载版本的 org.neo4j.graphalgo.GraphAlgoFactory.dijkstra() 返回,它返回 org.neo4j.graphalgo.impl.path.Dijkstra 的实例,该实例实现了 findAllPaths(( 方法。

(以上链接均为 neo4j 库 3.4 版本。

最新更新