3

com.couchbase.client在 java spring 项目中使用 maven 依赖项。我通过以下方式从代码中获取 couchbase 文档:

JsonDocument document = bucket.get(id); //matches id case sensitively

但我有一个新的要求。我必须根据id的不区分大小写匹配来获取文档。

例如:假设 couchbase 有一个带有 id 的文档heLLo_Doc

当我执行时,我希望返回bucket.get("hello_doc")带有 id 的文档。heLLo_Doc如果有多个文档具有相同的小写 ID(例如:Hello_DochEllo_doc),我需要获取所有这些文档。

couchbase 有没有提供任何方法来做到这一点?

最糟糕的方法是搜索我不想做的所有可能性。

4

2 回答 2

4

如果你想使用 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.
于 2018-10-17T13:10:28.083 回答
3

如果只是想使用 KV 引擎,则没有这样的功能。但是,您仍然可以将小写版本的 id 添加到文档中,并通过 n1ql 使用“LOWER”进行搜索https://docs.couchbase.com/server/5.5/n1ql/n1ql-language-reference/stringfun.html# fn-str-下

如果您需要带上您的 ID 的变体,例如“HelloDoc”,您还可以使用具有一定模糊性的全文搜索: https ://blog.couchbase.com/fuzzy-matching/

于 2018-10-17T11:15:08.530 回答