我正在尝试GremlinPipeline
使用以下代码找到最短路径:
final GremlinPipeline<String, List> pathPipe = new GremlinPipeline<String, List>(v1)
.as("similar")
.both("similar")
.loop("similar", new PipeFunction<LoopBundle<Vertex>, Boolean>() {
//@Override
public Boolean compute(LoopBundle<Vertex> bundle) {
return bundle.getLoops() < 5 && bundle.getObject() != v2;
}
})
.path();
我有两种情况。第一个是数据存储在 Titan 图数据库中,第二个是存储在 OrientDB 图数据库中。当我在第一个场景中使用上面的代码时,我得到一个列表,每个条目对应于连接顶点 v1 和 v2 的路径。第一个条目始终是最短路径.. 例如
[v[4], v[8]]
[v[4], v[20868], v[8]]
[v[4], v[4], v[8]]
[v[4], v[25800], v[8]]
(4是v1的id,8是节点2的id)
但是当我将上面的代码与 orientDB 数据一起使用时,我得到了不同的结果,例如
[v[#9:0], v[#9:0], v[#9:0]]
[v[#9:0], v[#9:0], v[#9:1]]
[v[#9:0], v[#9:0], v[#9:45]]
[v[#9:0], v[#9:0], v[#9:55]]
(#9:0 是 v1 的 id,#9:1 是 v2 的 id)
请注意,我使用以下代码打印结果:
Iterator iter = pathPipe.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
编辑:我使用 orientdb-1.6.1、titan 0.4.1、blueprints-core-2.5.0 和 blueprints-orient-graph-2.5.0