遍历 Graph 的子集以进行复杂查询

Traversing a subset of Graph for complex queries

我是 Gremlin 的新手,我正在努力提高查询效率。

图表看起来像这样:

[vertex: label=a] -> [vertex: label=b] -> [vertex: label=c] -> [vertex: label=d]

我需要遍历图,并得到每一步遍历的结果。

例如,从我的基础 Vertex 中,我可能需要获取与标签“b”相关的所有内容 与标签“c”相关的所有内容等等。

我可以像这样单独处理请求:

results1 = g.V('someid').out().hasLabel('b').toList()
results2 = g.V('someid').out().hasLabel('b').out().hasLabel('c').toList()
results3 = g.V('someid').out().hasLabel('b').out().hasLabel('c').out().hasLabel('d').toList()

但这似乎违反直觉,响应时间开始增加。

我不太确定我在找什么,但也许可以继续搜索图的一个子集,而不是每次都从基顶点开始。

编辑:

我找到了 Union 步骤,但这似乎将多个小查询合并为一个大查询,我相信最终会像单独执行所有查询一样效率低下。

在 Gremlin 中返回查询去向的 path 非常简单。下面是一个简单的示例,它使用了对航线进行建模的数据集:

g.V('3').  
  repeat(out().hasLabel('airport').simplePath()).
  until(has('code','AGR')).
  limit(5).
  path().
    by('code')

==>[AUS,JFK,BOM,AGR]
==>[AUS,YYZ,BOM,AGR]
==>[AUS,LHR,BOM,AGR]
==>[AUS,FRA,BOM,AGR]
==>[AUS,EWR,BOM,AGR] 

你会在这里找到一些相关的例子: http://www.kelvinlawrence.net/book/PracticalGremlin.html http://www.kelvinlawrence.net/book/PracticalGremlin.pdf