如何在Azure DocumentDb上进行不区分大小写的搜索?

Cod*_*elp 17 azure-cosmosdb

是否可以在DocumnetDb上执行不区分大小写的搜索?

假设我有一个'name'键和值为"Timbaktu"的记录

这将有效:

select * from json j where j.name  = "Timbaktu"
Run Code Online (Sandbox Code Playgroud)

这不会:

select * from json j where j.name  = "timbaktu"
Run Code Online (Sandbox Code Playgroud)

那你怎么做一个不区分大小写的搜索呢?

提前致谢.

问候.

Ara*_* R. 26

有两种方法可以做到这一点.1.使用内置的LOWER/UPPER功能,例如,

select * from json j where LOWER(j.name) = 'timbaktu'
Run Code Online (Sandbox Code Playgroud)

这需要扫描.另一种更有效的方法是存储"规范化"形式,例如小写,并将其用于查询.例如,JSON就是

{ name: "Timbaktu", nameLowerCase: "timbaktu" }
Run Code Online (Sandbox Code Playgroud)

然后使用它进行查询,如:

select * from json j WHERE j.nameLowerCase = "timbaktu"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • Codehelp,在我的查询中,我正在对数据库中的字符串调用 LOWER,对吗?我假设传入的字符串较低,但您可以改为执行 LOWER(j.name) = LOWER('timbaktu') (2认同)
  • Azure Cosmos DB 现在支持通过函数“Contains”、“EndsWith”、“StartsWith”和“StringsEquals”进行不区分大小写的查询。https://devblogs.microsoft.com/cosmosdb/new-string-function-performance-improvements-and-case-insensitive-search/ (2认同)

Noa*_*ahl 5

Cosmos 最近为字符串函数添加了一个不区分大小写的选项:

您现在可以选择使这些字符串比较不区分大小写:Contains、EndsWith、StringEquals 和 StartsWith。这些弦乐系统功能已经实现了显着的性能改进。这四个字符串系统函数中的每一个现在都受益于索引,因此延迟和请求单元 (RU) 消耗将大大降低。

公告