【问题标题】:Arangodb Java-driver Sort pathsArangodb Java-driver 排序路径
【发布时间】:2018-02-15 05:59:00
【问题描述】:

请您解释一下如何对路径进行排序。现在我有下一个代码

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

【问题讨论】:

    标签: java sorting traversal arangodb


    【解决方案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);
    });
    

    【讨论】:

    • 谢谢!所以还是用cursor比较好...会试试))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多