拜托,您能解释一下我如何排序路径。现在我有下一个代码
TraversalOptions options = new TraversalOptions()
.edgeCollection("edges")
.startVertex("nodes/9149892904413851091")
.verticesUniqueness(TraversalOptions.UniquenessType.path)
.direction(TraversalOptions.Direction.any)
.strategy(TraversalOptions.Strategy.depthfirst)
.order(TraversalOptions.Order.preorder)
.minDepth(5)
.maxDepth(5);
System.out.println("1");
TraversalEntity<BaseDocument, BaseEdgeDocument> traversal =
db.executeTraversal(BaseDocument.class, BaseEdgeDocument.class, options);
我如何理解选项中的.sort
方法将对边缘进行排序。但我想对路径进行排序。有什么想法吗?
我需要测试两种情况: 1.按路径长度排序(所以我会找到最短的路径) 2.按关系总和的总和排序(这样我就能找到权重较小的路径)
答案 0 :(得分:1)
使用AQL查询比使用Traversal更容易,更高效。
最短路径的(参数化)AQL查询如下所示:
FOR v IN ANY SHORTEST_PATH
@startVertex TO @targetVertex
edges
RETURN v
要获得加权最短路径(即权重总和最短),只需指定权重属性的名称:
FOR v IN ANY SHORTEST_PATH
@startVertex TO @targetVertex
edges
OPTIONS { weightAttribute: "weight" }
RETURN v
您可以在Java中使用AQL查询:
// Set the query parameters
Map<String, Object> bindVars
= new MapBuilder()
.put("startVertex", "nodes/1234")
.put("targetVertex", "nodes/5678")
.get();
// execute the query
ArangoCursor<BaseDocument> cursor = arango.db("mydb").query(
"FOR v IN ANY SHORTEST_PATH "
+ "@startVertex TO @targetVertex "
+ "edges "
+ "OPTIONS { weightAttribute: 'weight' } "
+ "RETURN v",
bindVars,
null,
BaseDocument.class
);
// do something with the results
cursor.forEach((v) -> {
System.out.println(v);
});