すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:zhparser

最終更新日:Sep 27, 2024

このトピックでは、AnalyticDB for PostgreSQLの全文検索中にzhparser拡張を使用して中国語の単語セグメンテーションを実行する方法について説明します。

フルテキスト検索の概要

デフォルトでは、PostgreSQLはスペースと句読点に基づいて単語のセグメンテーションを実行します。 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拡張機能を使用して中国語の単語セグメンテーションを実行する前に、インスタンスのExtensionsページにzhparser拡張機能をインストールする必要があります。 詳細については、「拡張機能のインストール、更新、およびアンインストール」をご参照ください。

  2. 次のステートメントを実行してzhparserを中国語テキストパーサーとして設定し、テキスト検索設定名をzh_cnに設定します。

    CREATE TEXT SEARCH CONFIGURATION zh_cn (PARSER = zhparser);

    設定が完了したら、\dFまたは \dFpコマンドを実行して設定を表示できます。

  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の設定を照会します。

      SELECT * FROM pg_ts_config_map 
      WHERE mapcfg=(SELECT oid FROM pg_ts_config WHERE cfgname='zh_cn');
  4. トークンタイプを追加または削除します。

    • トークンタイプを追加します。

      次のステートメントを実行して、単語分割に使用されるトークン型として、名詞、動詞、形容詞、イディオム、感嘆符、および一時イディオムを追加します。

      ALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR n,v,a,i,e,l WITH simple;
    • トークンの種類を削除します。

      次のステートメントを実行して、単語分割に使用されるトークン型から名詞、動詞、形容詞、イディオム、感嘆符、および一時イディオムを削除します。

      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)

カスタム辞書

zhparser拡張機能は、AnalyticDB for PostgreSQLのカスタム辞書をサポートします。 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,                                   --- Custom word
    tf FLOAT DEFAULT '1.0',                                  --- The term frequency (TF) of the word. Default value: 1.0.
    idf FLOAT DEFAULT '1.0',                                 --- The inverse document frequency (IDF) of the word. Default value: 1.0.
    attr CHAR DEFAULT '@', CHECK(attr = '@' OR attr = '!')   --- The type of the word. Value values: @ (new word) and ! (stop word).
);

カスタム辞書設定の追加

次のステートメントを実行して、カスタムセグメンテーション設定をzh_cnに追加します。

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;

カスタム辞書テーブルの読み込み

zhparser.zhprs_custom_wordテーブルに単語を追加または削除した後、テーブルをリロードして変更を有効にする必要があります。 次のステートメントを実行して、zhparser.zhprs_custom_wordテーブルをリロードします。

SELECT sync_zhprs_custom_word();

中国語の単語セグメンテーション効果を確認する

zhparser.zhprs_custom_wordテーブルを設定する前後に次のステートメントを実行して、中国語の単語セグメンテーション効果を確認します。

SELECT to_tsvector('zh_cn', '有两种方法进行全文检索');

次の単語セグメンテーション効果が返されます。

zhparser.zhprs_custom_wordテーブルを設定する前

+---------------------------------------+
| to_tsvector             |  
+---------------------------------------+
|'全文检索':4 '方法':2 '有':1 '进行':3 |
+---------------------------------------+
(1 ROW)

zhparser.zhprs_custom_wordテーブルの設定後

+---------------------------------------+
| to_tsvector             |  
+---------------------------------------+
|'两种方法':2 '全文检索':4 '有':1 '进行':3|
+---------------------------------------+
(1 ROW)

関連ドキュメント