如何在neo4j Java API中的给定两个节点之间找到路径,路径的所有权重的乘积在两个节点之间的所有路径中最大,我该怎么办? 在我的图形数据库中,有两个元素:一个是节点,另一个是关系,并且都具有name属性,但关系有一个额外的属性:weight(double类型和(0,1)中的值)。我的代码如下:我如何修改?
public static ArrayList<Path> getAllOptPaths(Long startNodeId, Long endNodeId, GraphDatabaseService db){
ArrayList<Path> optPathsBetweenTwoNodes = new ArrayList<Path>();
try (Transaction tx = db.beginTx()){
Node node1 = db.getNodeById(startNodeId);
Node node2 = db.getNodeById(endNodeId);
PathExpander<Object> pathExpander = PathExpanders.allTypesAndDirections();
CostEvaluator<Double> costEvaluator = CommonEvaluators.doubleCostEvaluator("Cost");
// find all paths between given two nodes
PathFinder<WeightedPath> dijkstraPathsFinder = GraphAlgoFactory.dijkstra(pathExpander, costEvaluator);
WeightedPath path = dijkstraPathsFinder.findSinglePath(node1, node2);
optPathsBetweenTwoNodes.add(path);
tx.success();
} catch (Exception e) {
e.printStackTrace();
}
return optPathsBetweenTwoNodes;
}
答案 0 :(得分:0)
在密码查询中也可以探索路径。这样可以为您提供加权路径计算的结果(因此也可以为其提供最小权重的路径)。
This webpage包含加权路径查询的示例。此外,Neo4j reduce功能将帮助您指定如何计算(和称重)路径。
答案 1 :(得分:0)
这个问题已经由我自己解决了,方法是修改neo4j核心JAVA API的来源。在修改源代码的过程中涉及一些具体的文件如下:Dijkstra.java,BestFirstSelectoryFactory.java,GraphAlgoFactory.java,Path .java,WeightedPathImpl.java,WeightedPathIterator.java。如果有人对修改的细节感兴趣,你可以发邮件给我。
答案 2 :(得分:0)
我认为改变代码库并不是一个好主意。使用函数setProperty()设置关系的属性(例如边的权重)时,可以使用键“Cost”设置边的权重。