1

我在用户和 uuid 上创建了一个索引

如果我做:

schema.vertexLabel("User").describe()

我得到:

schema.vertexLabel("User").index("byUuid").materialized().by("uuid").add()

当我跑步时:

g.V().hasLabel("User").has("uuid","oneUuid")

索引被正确拾取..

但是当我执行以下操作时:

g.V().or(__.hasLabel("User").has("uuid","oneUuid"), __.hasLabel("User").has("uuid","anotherUUID"))

我正进入(状态:

org.apache.tinkerpop.gremlin.driver.exception.ResponseException:找不到索引来回答查询子句并且 graph.allow_scan 被禁用:

谢谢!

4

1 回答 1

3

or()不容易优化,因为您可以做更复杂的事情,例如:

g.V().or(
    hasLabel("User").has("uuid","oneUuid"),  
    hasLabel("User").has("name","bob"))

...其中一个或多个条件无法通过索引查找来回答。这是可行的,并且可能会在未来的版本中完成,但是目前可用的图形数据库都没有尝试优化OrStep.

无论如何,您的示例查询可以很容易地重写,以便它实际使用索引:

g.V().hasLabel("User").has("uuid", within("oneUuid", "anotherUUID"))
于 2017-04-05T21:50:29.657 回答