Как правильно создать индекс массива Couchbase - PullRequest
0 голосов
/ 01 июля 2018

У меня есть следующий образец документа:

{
    “_class”: “some.package.Class”,
    “creationTime”: 1234567890,
    “title”: “title of element”,
    “tags”: [ “tag1”, “tag2”, “tag3” ]
}

Теперь я хочу запросить все элементы, которые содержат заданные 2 тега, с:

SELECT * FROM bucket WHERE _class = “some.package.Class”
AND (EVERY t IN [“tag1”, “tag2”] SATISFIES t IN tags END) LIMIT 16

Я попытался создать индекс для этого запроса с помощью:

CREATE INDEX some_idx_title ON bucket((distinct (array k for k in tags end))) 
WHERE (_class = “some.package.Class”)

Но при объяснении запроса на выборку он не появляется.

Как мне создать индекс для этого запроса?

1 Ответ

0 голосов
/ 02 июля 2018

Основной ответ заключается в том, что вы не можете. Индексы массива, реализованные в настоящее время, не могут соответствовать предикатам типа EVERY. Они могут использоваться только для предикатов типа ЛЮБОЙ, ЛЮБОЙ И КАЖДЫЙ.

Для получения дополнительной информации о том, как указать индексы массива и для каких предикатов они могут использоваться, обратитесь к этой ссылке:

https://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/indexing-arrays.html

(На этот точный вопрос также ответ на несколько более длинный вопрос в другом форуме .)

...