java - OrientDB 的 GremlinPipeline 问题

标签 java gremlin orientdb

我有以下代码片段,用于查找两个节点之间的最短路径:

GremlinPipeline<String, List> pathPipe = new GremlinPipeline<String, List>(v1)
            .as("similar")
            .out("similar")
            .loop("similar", new PipeFunction<LoopBundle<Vertex>, Boolean>() {
                //@Override
                public Boolean compute(LoopBundle<Vertex> bundle) {
                    return bundle.getLoops() < 5 && bundle.getObject() != v2;
                }
            })
            .path()

现在我想知道如何打印结果。我试试这个:

迭代器 iter = pathPipe.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); }

但我有以下奇怪的结果:

[v[#9:0], v[#9:1], v[#9:0]]
[v[#9:0], v[#9:1], v[#9:2]]
[v[#9:0], v[#9:1], v[#9:3]]
[v[#9:0], v[#9:1], v[#9:4]]
[v[#9:0], v[#9:1], v[#9:5]]
[v[#9:0], v[#9:1], v[#9:6]]
[v[#9:0], v[#9:1], v[#9:7]]
[v[#9:0], v[#9:1], v[#9:8]]
[v[#9:0], v[#9:1], v[#9:9]]
[v[#9:0], v[#9:1], v[#9:10]]
[v[#9:0], v[#9:1], v[#9:11]]
[v[#9:0], v[#9:1], v[#9:12]]
[v[#9:0], v[#9:1], v[#9:13]]
[v[#9:0], v[#9:1], v[#9:14]]
[v[#9:0], v[#9:1], v[#9:15]]
[v[#9:0], v[#9:1], v[#9:16]]

请注意,我正在尝试找到节点 v[#9:0] 和 v[#9:1] 之间的最短路径。

我的查找最短路径代码有问题吗?还是有其他方法可以打印我的结果?

我使用面向1.6.2。

最佳答案

我的 gremlin-java/pipeline 不如我的 gremlin-groovy,但我看到的一个问题是你没有在 Java 中正确处理顶点相等性。这部分:

&& bundle.getObject() != v2

对于 Groovy 有效,但在 Java 中我会将其写为:

&& !bundle.getObject().equals(v2)

关于java - OrientDB 的 GremlinPipeline 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22712836/

相关文章:

java - 为什么减少循环次数并不能加快程序速度?

java - vertx.io java + twitter4j - 事件循环集成

java - java spring项目中gremlin客户端集群的最佳实践是什么

database - 检查 OrientDB 的状态 - 损坏的顶点

java - 如何使用 Java 文档 API 为 OrientDB 数据库创建自动递增索引/序列?

java - 将输入保存到文件

javascript - 通过 $.ajax() 发送表单元素和数组

azure-cosmosdb - 使用 Gremlin Graph API 在 azure cosmos db 中搜索通配符或 "LIKE"

gremlin - AWS Neptune 日期时间()

node.js - Node Js 中的 OrientDB 分页