我在psql / rails中搜索带有国家字符的单词时遇到问题。 包括'ö','ó','ł','ü'等章程的单词 - 现在在db中它的名字:'łódź' - 搜索'łódź' - 它没关系,但有些人没有那些特殊的章程当搜索'lodz'搜索返回0结果。 我希望“Hästgård”适合:Hästgård,Hästgard,Hastgård和/或Hastgard
如何解决这个问题? 在mysql中,它通过排序规则'utf8_unicode_ci'及其工作进行搜索..
答案 0 :(得分:0)
您可以使用扩展程序 unaccent :
postgres=# create extension unaccent ;
CREATE EXTENSION
-- with fixed dictionary, the function can be immutable
CREATE OR REPLACE FUNCTION public._unaccent(text)
RETURNS text
LANGUAGE sql
IMMUTABLE
AS $function$ SELECT unaccent('unaccent', $1) $function$
postgres=# CREATE INDEX ON names((_unaccent(name)));
CREATE INDEX
postgres=# INSERT INTO names VALUES('Stěhule');
INSERT 0 1
postgres=# SELECT * FROM names WHERE _unaccent(name) = 'Stehule';
+---------+
| name |
+---------+
| Stěhule |
+---------+
(1 row)
当可以有更多行时,则使用index:
postgres=# SET enable_seqscan TO off; SET postgres=# EXPLAIN SELECT * FROM names WHERE _unaccent(name) = 'Stehule'; +----------------------------------------------------------------------------------+ | QUERY PLAN | +----------------------------------------------------------------------------------+ | Index Scan using names__unaccent_idx on names (cost=0.12..8.14 rows=1 width=32) | | Index Cond: (_unaccent(name) = 'Stehule'::text) | +----------------------------------------------------------------------------------+ (2 rows)