Gremlin后置过滤器路径 [英] Gremlin Post Filter Path

查看:11
本文介绍了Gremlin后置过滤器路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个符合以下模式的gremlin查询:

g.V().has('LOCATION', textContains('FLORIDA')).
repeat(bothE().otherV().simplePath()).emit().times(5).
has('LOCATION',textContains('VIRGINIA')).
path().by(valueMap('LOCATION')).dedup()

输出可能如下所示:

FLORIDA-->ALABAMA-->TENNESSEE-->VIRGINIA

FLORIDA-->GEORGIA-->TENNESSEE-->VIRGINIA

FLORIDA-->GEORGIA-->SOUTH CAROLINA-->NORTH CAROLINA-->VIRGINIA

etc...

有没有办法在PATH步骤之后进行过滤,以仅获得经过阿拉巴马州的路由(例如)。阿拉巴马州可能也不总是第二跳,所以它需要足够动态,无论要包括的州可能会落在哪里,都要着眼于整个路径。另一个问题是可能有多个州可供过滤,例如,类似于显示包含阿拉巴马州或南卡罗来纳州等的路径的内容。在此查询的实际应用程序中,还有多个属性被馈送到valueMap()中,但在这里只是试图简化它。这可能类似于此问题:

filter the gremlin results

但我想不出如何在过滤步骤后不出错地返回到valueMap()。我尝试了这样的方法,但不确定从哪里开始:

g.V().has('LOCATION', textContains('FLORIDA')).
repeat(bothE().otherV().simplePath()).emit().times(5).
has('LOCATION',textContains('VIRGINIA')).
path().filter(unfold().has('LOCATION', textContains('ALABAMA'))).
by(valueMap('LOCATION')).dedup()

推荐答案

您可以使用sack来跟踪它。这里有一个来自Practice Gremlin的例子,应该会有所帮助。该查询查找从奥斯汀到爱丁堡且至少有一站在曼彻斯特的路线。类似于您在阿拉巴马州的用例。如果在路径上遇到曼彻斯特,则将麻袋加1。由于使用simplePath,因此一个位置永远不会被访问两次。如果在到达EDI时,麻袋中包含1,则我们知道我们是通过MAN完成的。

g.withSack(0).V().
  has('code','AUS').
  repeat(out().simplePath().has('country',within('US','UK')).
         choose(has('code','MAN'),sack(sum).by(constant(1)))).
    until(has('code','EDI')).
  where(sack().is(1)).
  path().by('code').
  limit(10)

进一步阅读http://www.kelvinlawrence.net/book/PracticalGremlin.html#via

这篇关于Gremlin后置过滤器路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆