W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
unaccent
是一個(gè)文本搜索字典,它能從詞位中移除重音(附加符號(hào))。它是一個(gè)過濾詞典,這表示它的輸出總是會(huì)被傳遞給下一個(gè)字典(如果有),這和字典的通常行為不同。這允許為全文搜索做與重音無關(guān)的處理。
unaccent
的當(dāng)前實(shí)現(xiàn)不能被用作thesaurus
字典的正規(guī)化字典。
這個(gè)模塊被認(rèn)為是“可信的”,也就是說,它可以由對(duì)當(dāng)前數(shù)據(jù)庫具有CREATE
權(quán)限的非超級(jí)用戶安裝。
unaccent
字典接受下列選項(xiàng):
RULES
是包含翻譯規(guī)則列表的文件的基本名。這個(gè)文件必須被存儲(chǔ)在$SHAREDIR/tsearch_data/
(這里$SHAREDIR
表示PostgreSQL安裝的共享數(shù)據(jù)目錄)中。它的名稱必須以.rules
(不包含在
RULES
參數(shù)中)結(jié)束。
規(guī)則文件具有下面的格式:
每一行表示一個(gè)由帶有重音的字符和不帶重音的字符構(gòu)成的對(duì)。第一個(gè)字符將被翻譯成第二個(gè)。例如:
à A
á A
? A
? A
? A
? A
? AE
兩個(gè)字符必須由空格分隔,并且一行上的任何前導(dǎo)或尾隨空白都將被忽略。
或者,如果一行只給出一個(gè)字符,則刪除該字符的實(shí)例; 這在用單獨(dú)的字符表示重音的語言中是有用的。
實(shí)際上,每個(gè)“字符”可以是不包含空格的任何字符串,因此, 除了去除變音符之外,unaccent
字典也可以用于其他類型的字符串替換。
與其他PostgreSQL文本搜索配置文件一樣, 規(guī)則文件必須以UTF-8編碼方式存儲(chǔ)。加載時(shí),數(shù)據(jù)將自動(dòng)轉(zhuǎn)換為當(dāng)前數(shù)據(jù)庫的編碼。 任何含有不可翻譯字符的行都將被忽略,因此規(guī)則文件可以包含當(dāng)前編碼中不適用的規(guī)則。
在unaccent.rules
中可以找到一個(gè)更完整的例子,它可以直接用于大部分歐洲語言,當(dāng)unaccent
模塊被安裝時(shí),它被安裝在$SHAREDIR/tsearch_data/
中。
安裝unaccent
擴(kuò)展會(huì)創(chuàng)建一個(gè)文本搜索模板unaccent
和一個(gè)基于前者的字典unaccent
。unaccent
字典有默認(rèn)的參數(shù)設(shè)置RULES='unaccent'
,這會(huì)讓該字典使用標(biāo)準(zhǔn)的unaccent.rules
文件。如果希望修改該參數(shù),可以
mydb=# ALTER TEXT SEARCH DICTIONARY unaccent (RULES='my_rules');
或者基于該模板創(chuàng)建新的字典。
要測(cè)試該字典,你可以嘗試:
mydb=# select ts_lexize('unaccent','H?tel');
ts_lexize
-----------
{Hotel}
(1 row)
這里是一個(gè)展示把unaccent
字典插入到一個(gè)文本搜索配置的例子:
mydb=# CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french );
mydb=# ALTER TEXT SEARCH CONFIGURATION fr
ALTER MAPPING FOR hword, hword_part, word
WITH unaccent, french_stem;
mydb=# select to_tsvector('fr','H?tels de la Mer');
to_tsvector
-------------------
'hotel':1 'mer':4
(1 row)
mydb=# select to_tsvector('fr','H?tel de la Mer') @@ to_tsquery('fr','Hotels');
?column?
----------
t
(1 row)
mydb=# select ts_headline('fr','H?tel de la Mer',to_tsquery('fr','Hotels'));
ts_headline
------------------------
<b>H?tel</b> de la Mer
(1 row)
unaccent()
函數(shù)從一個(gè)給定的字符串中移除重音(附加符號(hào))。基本上,它是unaccent
字典的一個(gè)包裝器,但是它能在普通的文本搜索環(huán)境之外使用。
unaccent([dictionary
regdictionary
, ] string
text
) returns text
如果省略dictionary
參數(shù),則使用名為unaccent
并且與unaccent()
函數(shù)有相同模式的文本搜索詞典。
例如:
SELECT unaccent('unaccent', 'H?tel');
SELECT unaccent('H?tel');
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: