N1QL 查询没有使用预期的索引

N1QL query does not use the expected index

我正在尝试创建一个将使用特定索引的 couchbase N1QL 查询。 这是我的索引:

CREATE INDEX index_progressTest ON testbucket(payload.type, payload.display, payload.status, meta(testbucket).id) where payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS" using GSI;

这是我的查询(我使用解释来查看它将使用哪个索引):

EXPLAIN SELECT meta(jmbucket).id FROM testbucket WHERE payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS";

但是查询好像不会用到我的索引。 如果我从索引和查询中删除 "WHERE" 子句的最后一部分,那么一切正常。

我应该怎么做才能解决它?

谢谢!

这已在 Couchbase 4.5 中修复。

如果您想使用 4.1,请将其从您的索引中删除:

AND payload.status != "IN_PROGRESS"

请记住,Couchbase 区分大小写。确保在创建索引脚本中指定的列与文档中元素的大小写相匹配。我发现这很困难。 #lessonlearned