Couchbase中不区分大小写的文档ID匹配

时间:2018-10-17 10:44:38

标签: java database couchbase spring-data-couchbase couchbase-java-api

我在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_DochEllo_doc等),我需要获取所有这些文档。

couchbase是否提供任何方法来执行此操作?

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

2 个答案:

答案 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/