Gremlin 小叮当小精灵深度优先搜索顺序

Gremlin 小叮当小精灵深度优先搜索顺序,gremlin,tinkerpop,Gremlin,Tinkerpop,我有一个非常简单的示例图,我正在尝试获取深度优先查询。假设图的边是这样的 A->B A->C B->D B->E C->F C->G g.V('A').repeat(outE().inV()).emit() 应返回来自的深度优先搜索 A-B-D-E-C-F-G 但如果我能得到下面的订单,那就更好了 D-E-B-A-F-G-C-A 如何创建一个将输出此订单的Gremlin查询?如果我做这样的事 A->B A->C B->D B->

我有一个非常简单的示例图,我正在尝试获取深度优先查询。假设图的边是这样的

A->B
A->C
B->D
B->E
C->F
C->G
g.V('A').repeat(outE().inV()).emit()
应返回来自的深度优先搜索

A-B-D-E-C-F-G
但如果我能得到下面的订单,那就更好了

D-E-B-A-F-G-C-A
如何创建一个将输出此订单的Gremlin查询?如果我做这样的事

A->B
A->C
B->D
B->E
C->F
C->G
g.V('A').repeat(outE().inV()).emit()

我得到了A,B,C,D,E,F,G的顺序,它是宽度优先的。我不知道如何得到我想要的上述订单。

目前:你不能


我们是共同受难者。这是我最初在上提出的一个已知问题,然后尝试了一个只在遍历中没有
emit
步骤时才起作用的方法。你被邀请来帮助修复它,我还没有时间深入挖掘

要让其他人复制,下面是示例图:

g = TinkerGraph.open().traversal()
g.addV().property(id, 'A').
  addV().property(id, 'B').
  addV().property(id, 'C').
  addV().property(id, 'D').
  addV().property(id, 'E').
  addV().property(id, 'F').
  addV().property(id, 'G').
  addE('link').from(V('A')).to(V('B')).
  addE('link').from(V('A')).to(V('C')).
  addE('link').from(V('B')).to(V('D')).
  addE('link').from(V('B')).to(V('E')).
  addE('link').from(V('C')).to(V('F')).
  addE('link').from(V('C')).to(V('G')).iterate()
应返回来自的深度优先搜索

A-B-D-E-C-F-G
A-B-D-E-C-F-G

但如果我能得到下面的订单,那就更好了

D-E-B-A-F-G-C-A
D-E-B-F-G-C-A

这条路有点像是从后面卷起来的。这很棘手,但可行:

gremlin> g.V('A').
           repeat(outE('link').aggregate('edges').inV()).
             until(__.not(outE('link'))).
           flatMap(
             union(identity(),
                   repeat(inE('link').where(within('edges')).as('current').
                          map(select('edges').unfold().
                                where(neq('current').and(without('done'))).
                              outV().where(without('ad')).fold()).as('bl').
                          select(last, 'current').store('done').
                            filter(outV().where(without('bl').and(without('ad')))).
                          outV().store('ad')).
                     emit())).
           id().fold()
==>[D,E,B,F,G,C,A]

然而,在应用程序端获取路径和进行排序可能要容易得多。

令人惊讶的是,Gremlin无法对任意深度图进行深度优先搜索。这是一个非常常见的算法,您可能希望在图形上执行。感谢您的回答,因为它告诉我这还没有准备好用于生产系统。很抱歉,Gremlin不适合您的用例,但请不要认为它还没有准备好用于生产。它在许多使用图形数据库的高调系统中使用。