Gremlin - 从 属性 值的压缩列表中过滤边

Gremlin - filtering Edges from a zipped list of property values

我的边上有两个要过滤的属性:ab。我想使用以下列表过滤这些属性:

lst = [['0102', '2017-01-01'], ['4920', '2018-07-01'], ..., ['2198', '2018-04-01']]

...并使用以下逻辑:

('a1' AND 'b1') OR ('a2' AND 'b2') OR ... OR ('an' AND 'bn')

为了在 lst 中的单个值对上过滤边缘,我可以:

g.E().and(has('a', '0102'), has('b', '2017-01-01'))

要过滤所有这些,我可以:

s.E().or(and(has('a', '0102'), has('b', '2017-01-01')), 
         and(has('a', '4920'), has('b', '2018-07-01')),
         ...
         and(has('a', '2198'), has('b', '2018-04-01')))

该方法有效,需要手动输入过滤器参数。因此,一旦变量 lst 的内容发生变化,它就会中断。

有没有办法,给定变量 lst 的格式,通过将 lst 传递给查询来计算解决这个问题?

这会起作用:

g.E().as('e').
  filter(constant(lst).unfold().as('t').
         where('e', eq('t')).
           by('a').
           by(limit(local, 1)).
         where('e', eq('t')).
           by('b').
           by(tail(local, 1)))

但是,请注意,这将是对所有边缘的全面扫描,并且性能会随着 lst 尺寸的增加而进一步降低。

如果你的边是全局索引的(我不记得这在 JG 中是否可行),如果你并行执行 N 查询(其中 Nlst).

中的条目数