我在java spring项目中使用了com.couchbase.client
maven依赖项。我通过以下方式从代码中获取了一个沙发基文档:
JsonDocument document = bucket.get(id); //matches id case sensitively
但是我有一个新的要求。我必须根据不区分大小写的 id 来获取文档。
例如:
假设Sofabase有一个ID为heLLo_Doc
当我执行bucket.get("hello_doc")
时,我希望返回ID为heLLo_Doc
的文档。如果有多个具有相同小写字母ID的文档(例如Hello_Doc
,hEllo_doc
等),我需要获取所有这些文档。
couchbase是否提供任何方法来执行此操作?
最糟糕的方法是搜索所有我不想做的可能性。
答案 0 :(得分:4)
如果要使用N1QL。您需要在文档密钥上创建功能索引
CREATE INDEX ix1 ON default(LOWER(META().id));
SELECT * FROM default WHERE LOWER(META().id) = "hello_doc";
OR
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.
答案 1 :(得分:2)
如果您只想使用KV引擎,则没有此功能。但是,您仍然可以将ID的小写形式添加到文档中,并通过n1ql和“ LOWER” https://docs.couchbase.com/server/5.5/n1ql/n1ql-language-reference/stringfun.html#fn-str-lower进行搜索。
如果您需要提供ID的变体(例如“ HelloDoc”),则还可以使用具有一定模糊程度的全文本搜索: https://blog.couchbase.com/fuzzy-matching/