Graph 在apoc程序repo中,PathFinder的FindAllPath方法在哪里被超越?
我正在尝试为Dijkstra的搜索添加maxDepth。 我查看了apoc过程repo源代码,发现它们在WeightedPathResult.streamWeightedPathResult中,将PathFinder与startNode和enNode一起传递,它调用PathFinder接口的FindAllPath方法来查找所有路径。 我需要更改FindAllPath方法中的代码,以便在path.length()>maxDepth.com时中断搜索,但问题是我在任何文件中都找不到该方法重写。 下面是apoc dijkstra过程的一个片段Graph 在apoc程序repo中,PathFinder的FindAllPath方法在哪里被超越?,graph,neo4j,neo4j-apoc,Graph,Neo4j,Neo4j Apoc,我正在尝试为Dijkstra的搜索添加maxDepth。 我查看了apoc过程repo源代码,发现它们在WeightedPathResult.streamWeightedPathResult中,将PathFinder与startNode和enNode一起传递,它调用PathFinder接口的FindAllPath方法来查找所有路径。 我需要更改FindAllPath方法中的代码,以便在path.length()>maxDepth.com时中断搜索,但问题是我在任何文件中都找不到该方法重写。 下面
@程序
@描述(“apoc.algo.dijkstra(startNode,endNode,'KNOWS |','distance',defaultValue,numberOfWantedResults)产生路径,”+
“权重-使用关系属性名称作为成本函数运行dijkstra”)
dijkstra公共流(
@名称(“startNode”)节点startNode,
@名称(“endNode”)节点endNode,
@名称(“关系类型和方向”)字符串关系类型和方向,
@名称(“weightPropertyName”)字符串weightPropertyName,
@名称(value=“defaultWeight”,defaultValue=“NaN”)双默认权重,
@名称(value=“numberOfWantedPaths”,defaultValue=“1”)长numberOfWantedPaths){PathFinder algo=GraphAlgoFactory.dijkstra(
buildPathExpander(relTypesAndDirs),
(关系,方向)->Util.toDouble(relationship.getProperty(weightPropertyName,defaultWeight)),
(int)NumberOfWantedPath
);
返回WeightedPathResult.streamWeightedPathResult(开始节点、结束节点、算法);
}
下面是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);
}}
公共静态流streamWeightedPathResult(节点startNode、节点endNode、PathFinder algo){
Iterable AllPath=algo.findallPath(startNode,endNode);
返回StreamSupport.stream(allpath.spliterator(),false)
.map(加权路径结果::新建);
}}
他们从PathFinder接口调用FindAllPath方法,但它没有被重写,因此我可以在哪里对此方法进行更改???FindAllPath()方法在neo4j库中实现,而不是在APOC代码中实现
正如您的代码片段所示,特定的algo
实例由返回,它返回的实例实现了该方法
(以上链接均适用于neo4j库的3.4版。)谢谢,但您建议我在何处添加maxDepth条件,以便Dijkstra在超过最大遍历节点数时中断??我应该更改traverser方法吗?在你给我的链接里?
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);
}}