PostgreSQL的全文搜索西班牙字符全
我面临的文本做全文搜索PostgreSQL的时候,它包含德西班牙字符“N”PostgreSQL的全文搜索西班牙字符全
当我尝试来标记西班牙语单词“AÑO”(年)的问题我得到下面的结果取决于如果输入大写或小写:
SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año')
"to_tsvector" "to_tsquery"
"'aÑo':1" "'año'"
正如你所看到的结果是不一样的,它是区分大小写的,所以它使我的应用程序的全文搜索查询大小写敏感的,如果他们包含这个字符。
有什么办法可以解决这个问题吗?我一直在搜索有关全文搜索的PostgreSQL文档,并且我不知道如何在安装的字典中更改此行为。
非常感谢。 马蒂
到Ñ
转换成ñ
的能力to_tsvector
取决于语言环境,特别在lc_ctype
。假设您的数据库正在使用LC_CTYPE
,如C
,其知识仅限于US-ASCII
。
例如用LC_CTYPE
与兼容Unicode:
test=> show lc_ctype; lc_ctype ------------- fr_FR.UTF-8 (1 row) test=> SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año'); to_tsvector | to_tsquery -------------+------------ 'año':1 | 'año' (1 row)
注意,downcasing是你所期望的。
相反的例子有C
:
创作:
CREATE DATABASE cc lc_ctype 'C' template template0;
注缺乏downcasing的,如问题:
cc=> show lc_ctype ; lc_ctype ---------- C (1 row) cc=> SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año'); to_tsvector | to_tsquery -------------+------------ 'aÑo':1 | 'año' (1 row)
是的,你是对的丹尼尔:DB参数是CREATE DATABASE cda_repository 具有所有者= cda_repository_owner 编码= 'utf-8' TABLESPACE = cda_repository_fast_ts LC_COLLATE = 'C' LC_CTYPE = 'C' CONNECTION LIMIT = -1; ALTER DATABASE cda_repository SET default_text_search_config ='pg_catalog.spanish';在开始时我们应该存储国际文本,为此我们使用这些值。但最后所有的文字都用西班牙文。可能是我们不得不考虑重新创建数据库并更改LC_COLlATE和LC_CTYPE非常感谢 –
什么是你'client_encoding' ..和服务器?一个?..'''t =#SELECT to_tsvector('spanish','AÑO'),to_tsvector('spanish','año'); to_tsvector | to_tsvector ------------- + ------------- 'año':1 | 'año':1 (1 row) Time:69.873 ms t =#show client_encoding; client_encoding ----------------- UTF8 (1 row)'''不能用UTF8重现 –
我的客户端和服务器编码是UTF8。 –
我的分贝参数应用是:CREATE DATABASE cda_repository WITH OWNER = cda_repository_owner ENCODING = 'UTF8' TABLESPACE = cda_repository_fast_ts LC_COLLATE = 'C' LC_CTYPE = 'C' 连接限制= -1; ALTER DATABASE cda_repository SET default_text_search_config ='pg_catalog。西班牙“;谢谢你这么多 –