遍历图的子集进行复杂查询

问题描述

我对Gremlin还是陌生的,我正在尝试提高查询效率。

具有如下所示的图形:

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

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

例如,从我的基本Vertex中,我可能需要使用标签“ b”获得与之相关的所有内容 并使用标签“ c”获得与“ b”相关的所有内容,依此类推。 / p>

我可以这样单独进行请求:

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步骤,但这似乎将多个小查询合并为一个查询,我相信最终会导致效率低下,与单独执行所有查询相同。

解决方法

要返回查询去处的path在Gremlin中非常简单。这是一个使用数据集对航线进行建模的简单示例:

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

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

您将在此处找到一些相关示例: http://www.kelvinlawrence.net/book/PracticalGremlin.html http://www.kelvinlawrence.net/book/PracticalGremlin.pdf