如何在neo4j Java API中找到给定两个节点之间的路径,该路径的所有权重的乘积在两个节点之间的所有路径中都是最大的,我该怎么办?在我的图形数据库中,有两个元素:一个是node,另一个是relationship,它们都有一个name属性,但关系有一个额外的属性: weight (double type,value In (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;
}
发布于 2015-08-22 10:43:57
这个问题是我自己解决的,方法是修改neo4j核心JAVA API.In的源代码。修改源代码的过程涉及到一些具体的文档,如follows:Dijkstra.java、BestFirstSelectoryFactory.java、GraphAlgoFactory.java、Path.java、WeightedPathImpl.java、WeightedPathIterator.java。如果任何人对修改的细节感兴趣,你可以发邮件给我。
发布于 2015-08-04 17:53:34
在cypher查询中也可以探索路径。这可以为您提供加权路径计算的结果(因此具有最小权重的路径)。
This webpage包含一个加权路径查询的示例。此外,Neo4j reduce函数将帮助您指定如何计算(和加权)您的路径。
发布于 2017-05-26 14:51:42
正如我所想的那样,改变代码库不是一个好主意。在使用函数setProperty()设置关系的属性(例如,边的权重)时,可以使用关键字"Cost“设置边的权重。
https://stackoverflow.com/questions/31803177
复制相似问题