如何通过Java访问Gremlin中几个路径的顶点?

时间:2018-08-02 08:37:35

标签: java gremlin

我是Gremlin和Java的新手。我希望找到两条最短的路径。每个路径必须是唯一/不同的,并且彼此独立。 我尝试过

  • dedup()”,但它在全局路径上起作用,而不在构成路径的顶点上起作用。
  • limit(2)”当然,但是路径不是独立的(两条路径中存在某些顶点)

我不知道是否可以用gremlin做到这一点。

这是我的代码:

List<Object> result = g.V().has("name", "room1").as("from").repeat(out().simplePath())
            .until(has("name", "room2")).as("to").path().as("p").select("p").limit(2).toList();

您对格雷姆林有何建议?

1 个答案:

答案 0 :(得分:0)

您评论中的示例图:

g = TinkerGraph.open().traversal()
g.addV().property(id, 'd0').
  addV().property(id, 'd1').
  addV().property(id, 'd2').
  addV().property(id, 'd3').
  addV().property(id, 'd4').
  addV().property(id, 'd5').
  addE('link').from(V('d0')).to(V('d1')).
  addE('link').from(V('d0')).to(V('d4')).
  addE('link').from(V('d1')).to(V('d2')).
  addE('link').from(V('d1')).to(V('d4')).
  addE('link').from(V('d2')).to(V('d3')).
  addE('link').from(V('d4')).to(V('d3')).iterate()

d0d3的所有路径:

gremlin> g.V('d0').
......1>   repeat(out('link').simplePath()).
......2>     until(hasId('d3')).
......3>   path()
==>[v[d0],v[d4],v[d3]]
==>[v[d0],v[d1],v[d2],v[d3]]
==>[v[d0],v[d1],v[d4],v[d3]]

现在要根据起始顶点和结束顶点之间已经看到哪些顶点来过滤路径,您只需要记住这些顶点并将它们用作进一步顶点的过滤器即可:

gremlin> g.V('d0').
......1>   repeat(out('link').simplePath()).
......2>     until(hasId('d3')).
......3>   path().
......4>   filter(unfold().hasId(without('d0','d3')).fold().
......5>          filter(unfold().where(without('x'))).
......6>          unfold().store('x'))
==>[v[d0],v[d4],v[d3]]
==>[v[d0],v[d1],v[d2],v[d3]]