【问题标题】:PostgreSQL Full Text Search Spanish character ÑPostgreSQL全文搜索西班牙字符Ñ
【发布时间】:2017-08-08 12:07:26
【问题描述】:

我在使用 PostgreSQL 对包含西班牙字符“Ñ”的文本进行全文搜索时遇到问题

当我尝试标记西班牙语单词“AÑO”(年份)时,根据输入是大写还是小写,我得到以下结果:

SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año')
"to_tsvector"   "to_tsquery"
"'aÑo':1"   "'año'"

如您所见,结果不一样并且区分大小写,因此如果包含此字符,我的应用程序全文搜索查询会区分大小写。

有什么办法可以解决这个问题吗?我一直在搜索有关全文搜索的 PostgreSQL 文档,但我不知道如何在已安装的字典上更改此行为。

非常感谢。 马蒂

【问题讨论】:

  • 你的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' CONNECTION LIMIT = -1; ALTER DATABASE cda_repository SET default_text_search_config = 'pg_catalog.spanish';非常感谢
  • 请阅读丹尼尔的精彩回答

标签: postgresql full-text-search


【解决方案1】:

to_tsvectorÑ 转换为ñ 的能力取决于语言环境,特别是lc_ctype。大概您的数据库正在使用LC_CTYPE,例如C,其知识仅限于US-ASCII

LC_CTYPE 与 Unicode 兼容的示例:

测试=> 显示 lc_ctype; lc_ctype ------------- fr_FR.UTF-8 (1 行) test=> SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año'); to_tsvector | to_tsquery -------------+------------ 'año':1 | 'año' (1 行)

请注意,降级是您所期望的。

C 的相反示例:

创作:

CREATE DATABASE cc lc_ctype 'C' template template0;

请注意缺少向下大小写,如问题所示:

cc=> 显示 lc_ctype ; lc_ctype ---------- C (1 行) cc=> SELECT to_tsvector('spanish','AÑO'),to_tsquery('spanish','año'); to_tsvector | to_tsquery -------------+------------ 'aÑo':1 | 'año' (1 行)

【讨论】:

  • 是的,你是对的 Daniel:数据库参数是 CREATE DATABASE cda_repository WITH OWNER = cda_repository_owner ENCODING = 'UTF8' 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 非常感谢
猜你喜欢
  • 2015-10-07
  • 2017-08-22
  • 1970-01-01
  • 2021-04-15
  • 2023-03-18
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多