【问题标题】:Gremlin - if multiple vertices return multiple values each, how to limit the result to one per vertexGremlin - 如果多个顶点每个返回多个值,如何将结果限制为每个顶点一个
【发布时间】:2019-07-18 15:14:35
【问题描述】:

本质上,我正在尝试修改以下 Gremlin 代码,以便一次处理单个顶点而不是一次操作 - 由 g.V(1) 表示,它将一次处理多个顶点(例如更改为 @987654322 @),同时仍然只将返回结果的数量每个顶点限制为一个(参见limit(1))。

g.V(1).repeat(out().simplePath()).until(has('color', 'red')).path().limit(1)

上述查询将计算从给定顶点到具有property(color)==red 的最近顶点的最短路径。

但是,我想计算同时传入的多个顶点的最短路径,同时每个顶点仍然只返回一个路径。

但是,如果不为同一个顶点返回多个路径,我很难修改它。

【问题讨论】:

  • 我想让它适应多个顶点的原因是我已经将它移植到gremlinpython 包装器上,我想尽量减少对 gremlin-server 的查询数量,因为每个查询都可能耗费大量时间。

标签: gremlin janusgraph gremlin-server


【解决方案1】:

按起始顶点对结果进行重复数据删除应该会给您预期的结果。

g.V().as('a').
  repeat(out().simplePath()).
    until(has('color', 'red')).
  dedup('a').
  path()

使用现代玩具图的示例:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().
......1>   repeat(out().simplePath()).
......2>     until(hasLabel('software')).
......3>   path()
==>[v[1],v[3]]
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]
==>[v[4],v[5]]
==>[v[4],v[3]]
==>[v[6],v[3]]
gremlin> g.V().as('a').
......1>   repeat(out().simplePath()).
......2>     until(hasLabel('software')).
......3>   dedup('a').path()
==>[v[1],v[3]]
==>[v[4],v[5]]
==>[v[6],v[3]]

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多