在PostgreSQL 12+中,可以使用不确定的ICU归类来实现不区分重音的搜索 (see this StackOverflow answer).
我想实现accent insensitive search,同时仍然使用accent sensitive sorting.
Consider the following example:
我有一个名为Country_Region的表,其中只有一列:"Symbol".它存储以下值:
- 鲁布斯基
- 兹基
- MałPolskie
这些值已按预期顺序列出,因为波兰字母顺序是L->;Ł->;M.
下面的SQL查询应该返回"兹基"字段,忽略变音符号:
SELECT * FROM country_region WHERE symbol = 'lodzkie'
下面的SQL查询应该返回按字母表(鲁布斯基->;兹基->;MałPolskie)排序的值:
SELECT * FROM country_region ORDER BY symbol
What I have tried
我试过使用两个不同的ICU地点.
在下面的归类中,Unicode区域设置搜索按预期工作,但行的排序顺序错误:
CREATE COLLATION ignore_accent (provider = icu, locale = 'und-u-ks-level1-kc-true', deterministic = FALSE);
CREATE INDEX test_index ON country_region(symbol COLLATE ignore_accent);
在下面的排序规则中,波兰语区域设置排序按预期工作,但在搜索中不会忽略变音符号:
CREATE COLLATION ignore_accent (provider = icu, locale = 'pl-u-ks-level1-kc-true', deterministic = FALSE);
CREATE INDEX test_index ON country_region(symbol COLLATE ignore_accent);
有没有可能用PostgreSQL解决这个问题?提前谢谢!