Arangodb Java-driver 排序路径

Arangodb Java-driver Sort paths

拜托,你能解释一下我如何对路径进行排序吗?现在我有了下一个代码

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. 按关系权重之和排序(这样我就能找到权重较小的路径)

使用 AQL 查询比遍历查询更容易、更高效地实现您的目标。

最短路径的(参数化)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);
});