AnalyticDB for PostgreSQL資料庫安裝Zhparser外掛程式後可以實現全文檢索索引時的中文分詞。
全文檢索索引概述
PostgreSQL預設按照空格及各種標點符號來分詞,不支援中文分詞。AnalyticDB for PostgreSQL通過整合Zhparser擴充來支援中文分詞。
一般情況下,全文檢索索引可以採用如下兩種方法:
搜尋表:
SELECT name FROM <table...> WHERE to_tsvector('english', name) @@ to_tsquery('english', 'friend');
建立GIN索引:
CREATE INDEX <idx_...> ON <table...> USING gin(to_tsvector('english', name));
配置Zhparser
安裝Zhparser外掛程式。
使用全文檢索索引時的中文分詞功能之前,您需要在AnalyticDB for PostgreSQL執行個體外掛程式管理中安裝Zhparser外掛程式。具體操作,請參見安裝、升級與卸載外掛程式。
配置中文解析器,取名為zh_cn。
CREATE TEXT SEARCH CONFIGURATION zh_cn (PARSER = zhparser);
查看分詞策略。
查看Zhparser的詞典配置:
SELECT ts_token_type('zhparser');
返回資訊如下:
ts_token_type --------------------------------- (97,a,"adjective,形容詞") (98,b,"differentiation,區別詞") (99,c,"conjunction,連詞") (100,d,"adverb,副詞") (101,e,"exclamation,感歎詞") (102,f,"position,方位詞") (103,g,"root,詞根") (104,h,"head,前串連成分") (105,i,"idiom,成語") (106,j,"abbreviation,簡稱") (107,k,"tail,後串連成分") (108,l,"tmp,慣用語") (109,m,"numeral,數詞") (110,n,"noun,名詞") (111,o,"onomatopoeia,擬聲詞") (112,p,"prepositional,介詞") (113,q,"quantity,量詞") (114,r,"pronoun,代詞") (115,s,"space,處所詞") (116,t,"time,時語素") (117,u,"auxiliary,助詞") (118,v,"verb,動詞") (119,w,"punctuation,標點符號") (120,x,"unknown,未知詞") (121,y,"modal,語氣詞") (122,z,"status,狀態詞") (26 rows)
查看zh_cn的結構(Configuration):
SELECT * FROM pg_ts_config_map WHERE mapcfg=(SELECT oid FROM pg_ts_config WHERE cfgname='zh_cn');
添加或刪除分詞策略:
添加分詞策略:
添加名詞(n)、動詞(v)、形容詞(a)、成語(i)、歎詞(e)和慣用語(l) 六種分詞策略:
ALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR n,v,a,i,e,l WITH simple;
刪除分詞策略:
刪除名詞(n)、動詞(v)、形容詞(a)、成語(i)、歎詞(e)和慣用語(l)六種分詞策略:
ALTER TEXT SEARCH CONFIGURATION zh_cn DROP MAPPING IF EXISTS FOR n,v,a,i,e,l;
通過以下下兩個函數測試全文檢索索引中文分詞功能:
to_tsvector:
SELECT to_tsvector('zh_cn', '有兩種方法進行全文檢索索引');
返回資訊如下:
to_tsvector --------------------------------------- '全文檢索索引':4 '方法':2 '有':1 '進行':3 (1 ROW)
to_tsquery:
SELECT to_tsquery('zh_cn', '有兩種方法進行全文檢索索引');
返回資訊如下:
to_tsquery ------------------------------------- '有' & '方法' & '進行' & '全文檢索索引' (1 ROW)
自訂字典
AnalyticDB for PostgreSQLZhparser外掛程式支援自訂字典。通過向自訂字典表zhparser.zhprs_custom_word
寫入或刪除資料,實現添加或刪除自訂詞的功能。詞典表zhparser.zhprs_custom_word
的表結構如下。
您無需手動建立詞典表。安裝zhparser外掛程式時,系統會自動建立詞典表
zhparser.zhprs_custom_word
。已安裝zhparser外掛程式的使用者,系統也已經自動建立了詞典表
zhparser.zhprs_custom_word
,您無需再手動建立。
CREATE TABLE zhparser.zhprs_custom_word
(
word text PRIMARY key, --- 自訂詞
tf FLOAT DEFAULT '1.0', --- 該詞的自訂TF值,預設1.0
idf FLOAT DEFAULT '1.0', --- 該詞的自訂IDF值,預設1.0
attr CHAR DEFAULT '@', CHECK(attr = '@' OR attr = '!') --- 該詞的詞性:@ 新增;! 停止
);
添加自訂字典配置
添加自訂分詞配置至解析器zh_cn中,具體SQL語句如下。
ALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR x with simple;
添加自訂詞
INSERT INTO zhparser.zhprs_custom_word(word, attr) VALUES('兩種方法', '@');
刪除自訂詞
DELETE FROM zhparser.zhprs_custom_word WHERE word='兩種方法';
查詢自訂字典表
SELECT * FROM zhparser.zhprs_custom_word;
載入自訂字典表
在添加或刪除自訂詞之後,需要重新載入自訂字典表,新的自訂字典表才會生效。重新載入自訂字典表的SQL語句如下。
SELECT sync_zhprs_custom_word();
自訂分詞的檢索效果
在配置自訂字典表前後,分別執行樣本語句,驗證分詞結果。樣本SQL語句如下。
SELECT to_tsvector('zh_cn', '有兩種方法進行全文檢索索引');
分詞檢索效果如下:
未配置自訂字典表
+---------------------------------------+
| to_tsvector |
+---------------------------------------+
|'全文檢索索引':4 '方法':2 '有':1 '進行':3 |
+---------------------------------------+
(1 ROW)
在詞典表中添加詞“兩種方法”
+---------------------------------------+
| to_tsvector |
+---------------------------------------+
|'兩種方法':2 '全文檢索索引':4 '有':1 '進行':3|
+---------------------------------------+
(1 ROW)
相關文檔
全文檢索索引總體介紹,請參見全文檢索索引。
全文檢索索引函數和操作符,請參見文本檢索函數和操作符。