在 tinkerpop gremlin 中,如何搜索 属性 值是参数子集的顶点?
In tinkerpop gremlin, how do I search for Vertices where a property value is a subset of an argument?
我有一个图,其中的顶点有一个 属性 “foo”,它是一个集合。我想找到所有“foo”是我输入的子集的顶点。例如,
g.addV('v').property('foo', 'bar').property('foo','baz')
我想查询此图,如果给定 ["bar, "quux", "quuz"]
的输入,我将找不到符合条件的顶点,因为顶点 属性 不是 ["bar, "quux", "quuz"]
[ 的子集=17=]
如果我得到 ["bar", "quux, "quuz", "baz"]
的输入,那么这个顶点将被返回,因为 ["bar", "baz"]
是 ["bar", "quux, "quuz", "baz"]
的子集
这种集合交集很棘手,因为 Gremlin 语言不像 Groovy 那样具有 containsAll
类型的方法。如果您能够在查询中包含 Groovy 闭包(并非所有实现都允许它们),一种方法如下:
gremlin> g.addV('v').property('foo', 'bar').property('foo','baz')
==>v[61286]
gremlin> g.V().hasLabel('v').
......1> filter {["bar", "quux", "quuz", "baz"].
......2> containsAll(it.get().values('foo').
......3> collect())}
==>v[61286]
gremlin> g.V().hasLabel('v').property(set,'foo','abc')
==>v[61286]
gremlin> g.V().hasLabel('v').valueMap()
==>[foo:[bar,baz,abc]]
gremlin> g.V().hasLabel('v').
......1> filter {["bar", "quux", "quuz", "baz"].
......2> containsAll(it.get().values('foo').
......3> collect())}
gremlin>
通常不建议使用闭包,因为并非所有实现都允许闭包,而且闭包不太可能利用后端优化和索引。
我有一个图,其中的顶点有一个 属性 “foo”,它是一个集合。我想找到所有“foo”是我输入的子集的顶点。例如,
g.addV('v').property('foo', 'bar').property('foo','baz')
我想查询此图,如果给定 ["bar, "quux", "quuz"]
的输入,我将找不到符合条件的顶点,因为顶点 属性 不是 ["bar, "quux", "quuz"]
[ 的子集=17=]
如果我得到 ["bar", "quux, "quuz", "baz"]
的输入,那么这个顶点将被返回,因为 ["bar", "baz"]
是 ["bar", "quux, "quuz", "baz"]
这种集合交集很棘手,因为 Gremlin 语言不像 Groovy 那样具有 containsAll
类型的方法。如果您能够在查询中包含 Groovy 闭包(并非所有实现都允许它们),一种方法如下:
gremlin> g.addV('v').property('foo', 'bar').property('foo','baz')
==>v[61286]
gremlin> g.V().hasLabel('v').
......1> filter {["bar", "quux", "quuz", "baz"].
......2> containsAll(it.get().values('foo').
......3> collect())}
==>v[61286]
gremlin> g.V().hasLabel('v').property(set,'foo','abc')
==>v[61286]
gremlin> g.V().hasLabel('v').valueMap()
==>[foo:[bar,baz,abc]]
gremlin> g.V().hasLabel('v').
......1> filter {["bar", "quux", "quuz", "baz"].
......2> containsAll(it.get().values('foo').
......3> collect())}
gremlin>
通常不建议使用闭包,因为并非所有实现都允许闭包,而且闭包不太可能利用后端优化和索引。