遍历 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
我是 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