【问题标题】:How can I get fast results with case insensitive search in mongodb?如何在 mongodb 中通过不区分大小写的搜索获得快速结果?
【发布时间】:2016-01-19 10:40:41
【问题描述】:

我的 mongodb 数据库中有几百万条记录。 假设我的所有记录中都有一些通用字段,例如姓名、姓氏等...

1) 我需要搜索不区分大小写。常见的答案是使用正则表达式,但我认为它会显着降低我的应用程序性能。这是最好的方法吗?

2) 我应该能够以我的语言(土耳其语)获得结果。在土耳其语中,i 的大写字母是 İ,ı 的大写字母是 I。如果我的字符串包含这些字母,我什至不会得到正确的结果。即使使用不区分大小写的正则表达式搜索。如果 mongo 中没有数据库语言选项,我该如何解决这个问题?

3) 你认为还有另一种更适合我的目的的 nosql 解决方案吗? (不区分大小写搜索具有不同列和土耳其字符集的数百万条记录)

谢谢

【问题讨论】:

  • 不完全是,我也有语言特定的字符问题,所以使用正则表达式对我来说可能是一个糟糕的决定
  • 从你的问题来看,你的问题是大写字母。但是,如果您按照我链接的答案建议将文本保存为小写,则很有可能它可以工作。
  • 顺便说一句,Mongo 已经使用 Unicode。所以你的问题可能是匹配模式而不是 Mongo 的表示。 From the docs,你甚至可以使用 PCRE。我建议您尝试在您的正则表达式模式中转义土耳其语特定字母。例如,不要使用“İ”,而是使用“\u{unicode of İ}”。您必须对此进行测试,我仍然建议您将字符串保存为小写或大写以进行搜索,因为索引可能会变得混乱。

标签: mongodb case-insensitive


【解决方案1】:

MongoDB 从 2.6 开始有一个文本索引 (https://docs.mongodb.org/manual/reference/operator/query/text/#text-query-operator-behavior)。但它没有说明土耳其语的行为是什么,尽管它是受支​​持的。

对于拉丁字母,文本搜索对非变音符号不区分大小写;即 [A-z] 不区分大小写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多