Соответствие идентификатора документа без учета регистра в Couchbase
Я использую com.couchbase.client
Maven зависимость в проекте Java Spring. Я получаю документ Couchbase из кода следующим образом:
JsonDocument document = bucket.get(id); //matches id case sensitively
Но у меня есть новое требование. Я должен получить документы, основанные на нечувствительном к регистру сопоставлении идентификатора.
Например: допустим, у couchbase есть документ с идентификатором heLLo_Doc
Когда я выполню bucket.get("hello_doc")
я хочу документ с идентификатором heLLo_Doc
быть возвращенным. Если существует несколько документов с одинаковыми строчными идентификаторами (например: Hello_Doc
,hEllo_doc
и т.д.) мне нужно получить все эти документы.
Есть ли какой-нибудь метод, предоставленный couchbase, чтобы сделать это?
Худший способ сделать это - искать все возможности, которые я не хочу делать.
2 ответа
Если вы хотите использовать N1QL. Вам необходимо создать функциональный индекс по ключу документа
CREATE INDEX ix1 ON default(LOWER(META().id));
SELECT * FROM default WHERE LOWER(META().id) = "hello_doc";
ИЛИ ЖЕ
SELECT META().id FROM default WHERE LOWER(META().id) = "hello_doc";
The second query gives actual document keys then you can pass this to your existing bucket.get() call too.
Там нет такой функции, если вы просто хотите использовать двигатель KV. Но вы все равно можете добавить строчную версию своего идентификатора в ваш документ и выполнить поиск по n1ql с помощью "LOWER" https://docs.couchbase.com/server/5.5/n1ql/n1ql-language-reference/stringfun.html.
если вам нужно привести варианты своего идентификатора, например "HelloDoc", вы также можете использовать полнотекстовый поиск с некоторым уровнем размытости: https://blog.couchbase.com/fuzzy-matching/