我正在寻找一种方法来支持具有良好性能的不区分大小写的重音不敏感搜索.到目前为止我们使用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.细节:
我在referenced answer上添加了一个注释.
或者您可以使用附加模块citext: