为什么 or() 查询在 Datastax DSE 5.0.x 图表中不使用索引?

Why or() queries are not using index in Datastax DSE 5.0.x Graph?

我已经在 User 和 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: Could not find an index to answer query clause and graph.allow_scan is disabled:

谢谢!

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

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

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

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

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