全部產品
Search
文件中心

AnalyticDB:Zhparser

更新時間:Jul 02, 2024

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

  1. 安裝Zhparser外掛程式。

    使用全文檢索索引時的中文分詞功能之前,您需要在AnalyticDB for PostgreSQL執行個體外掛程式管理中安裝Zhparser外掛程式。具體操作,請參見安裝、升級與卸載外掛程式

  2. 配置中文解析器,取名為zh_cn。

    CREATE TEXT SEARCH CONFIGURATION zh_cn (PARSER = zhparser);
  3. 查看分詞策略。

    • 查看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');
  4. 添加或刪除分詞策略:

    • 添加分詞策略:

      添加名詞(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;
  5. 通過以下下兩個函數測試全文檢索索引中文分詞功能:

    • 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)

相關文檔