如何在 gremlin 中使用 .or() 或 T.in 而不进行整个图形扫描



我正在使用 Titan 0.5.1 和 gremlin,我正在尝试在数据库中查询所有具有 Type A 或 TypeB 类型的顶点。

我尝试了这两种方法, g.V().has("type" T.in, ["typeA","typeB"])g.V().or(_().has("type","typeA"),_().has("type","typeB"))

虽然它们都产生我想要的结果,但它们都涉及完整的图形扫描。

如果我把它们分开做 g.V().has("type","typeA")g.V().has("type","typeB")然后命中索引,不需要全图扫描。 无论如何可以使用索引并同时执行两个查询,因为我需要在获得这两种类型的所有顶点后继续进行更多的遍历和过滤。

谢谢

这应该使用索引:

g.V().has("type" T.in, ["typeA","typeB"])

虽然我认为 0.5.x 行有一个错误。 同时,您可以执行以下操作:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> ["marko","josh"]._().transform{g.V('name',it).next()}
==>v[1]
==>v[4]

最新更新