Gremlin查询找到k个距离顶点

时间:2018-03-20 06:47:07

标签: gremlin breadth-first-search tinkerpop3 janusgraph

我试图运行一个gremlin查询来查找给定顶点v的k个距离顶点,并省略直接连接的顶点到v。

我正在使用Gremlin 3.2.6。

所以,这样的事情,对于k距离(朋友的朋友)来说还不能正常工作

g.V(v).both().as(“x”).repeat(both()).times(k).where(neq("x")).dedup()

上面应该省略" x"中的顶点。但事实并非如此。 我的图是指向的,并且在一对顶点之间可能存在两个方向上的边。

另外,如何在给定距离小于某些k的情况下使用循环(使用它有困难)来制作这种通用,并且有一些方法可以打印距离和顶点列表。感谢。

1 个答案:

答案 0 :(得分:2)

x实际上应该是所有相邻顶点的聚合,而不仅仅是对当前路径上相邻顶点的引用。

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).both().aggregate("x").
           repeat(both().dedup()).
             times(5).
             emit().
           where(without("x"))
==>v[1]
==>v[6]
==>v[5]

如果您还想排除起始顶点,只需将其添加到集合中:

gremlin> g.V(1).store("x").
           both().aggregate("x").
           repeat(both().dedup()).
             times(5).
             emit().
           where(without("x"))
==>v[6]
==>v[5]