#couchbase #n1ql
#couchbase #n1ql
Вопрос:
Я пытаюсь создать запрос 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, чтобы увидеть, какой индекс он будет использовать):
EXPLAIN SELECT meta(jmbucket).id FROM testbucket WHERE payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS";
Но, похоже, что запрос не будет использовать мой индекс.
Если я удалю последнюю часть предложения «WHERE» как из индекса, так и из запроса, тогда все будет работать нормально.
Что я должен сделать, чтобы это исправить?
Спасибо!
Комментарии:
1. забыл упомянуть, что я использую couchbase 4.1.1
2. Удалите meta().id из определения вашего индекса. Он уже является частью индекса. Поэтому, добавляя его явно, вы просто сохраняете его дважды и тратите впустую пространство.
3. @Kirk Я попробую, спасибо 🙂
Ответ №1:
Это исправлено в Couchbase 4.5.
Если вы хотите использовать 4.1, удалите это из своего индекса:
AND payload.status != "IN_PROGRESS"
Ответ №2:
Помните, что Couchbase чувствителен к регистру. Убедитесь, что столбцы, указанные в вашем скрипте создания индекса, соответствуют регистру элементов в документе. Я выяснил это на собственном горьком опыте. #урок усвоен