2017-08-08 61 views
2

我面臨的文本做全文搜索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文檔,並且我不知道如何在安裝的字典中更改此行爲。

非常感謝。 馬蒂

+0

什麼是你'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重現 –

+0

我的客戶端和服務器編碼是UTF8。 –

+0

我的分貝參數應用是: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。西班牙「;謝謝你這麼多 –

回答

2

Ñ轉換成ñ的能力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) 
+0

是的,你是對的丹尼爾: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非常感謝 –