加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL重音不区分大小写搜索

发布时间:2020-12-13 16:34:55 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来支持具有良好性能的不区分大小写的重音不敏感搜索.到目前为止我们使用MSSql服务器没有问题,在Oracle上我们必须使用OracleText,现在我们需要在PostgreSQL上使用它. 我发现这篇关于重音不敏感的帖子: Does PostgreSQL support “accent i
我正在寻找一种方法来支持具有良好性能的不区分大小写的重音不敏感搜索.到目前为止我们使用MSSql服务器没有问题,在Oracle上我们必须使用OracleText,现在我们需要在PostgreSQL上使用它.

我发现这篇关于重音不敏感的帖子:
Does PostgreSQL support “accent insensitive” collations?

但我们需要将它与不区分大小写结合起来.我们还需要使用索引,否则可能会影响性能.
有关大型数据库最佳方法的真实经验吗?

如果您需要“结合不区分大小写”,则有多种选择,具体取决于您的具体要求.

也许最简单,使表达式索引不区分大小写.

建立在引用答案中列出的函数f_unaccent():

> Does PostgreSQL support “accent insensitive” collations?

CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

然后:

SELECT *
FROM   users
WHERE  lower(f_unaccent(name)) = lower(f_unaccent('Jo?o'));

或者你可以将lower()构建到函数f_unaccent()中,以得到像f_lower_unaccent()这样的东西.

或者(特别是如果你需要进行模糊模式匹配)你可以使用由上面函数构建的附加模块pg_trgm提供的三元组索引,它也支持ILIKE.细节:

> LOWER LIKE vs iLIKE

我在referenced answer上添加了一个注释.

或者您可以使用附加模块citext

> Deferrable,case-insensitive unique constraint

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读