このトピックでは、zhparser拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスで中国語のフルテキスト検索を実行する方法について説明します。
前提条件
RDSインスタンスはPostgreSQL 10以降を実行します。
RDSインスタンスは、20230830以降のマイナーエンジンバージョンを実行します。
重要拡張機能は、20230830より前のマイナーエンジンバージョンでサポートされています。 ApsaraDB RDS for PostgreSQLの拡張機能管理を標準化し、拡張機能のセキュリティを強化するために、ApsaraDB RDSはマイナーエンジンバージョンのイテレーションで脆弱な拡張機能を最適化する予定です。 その結果、以前のマイナーエンジンバージョンを実行するRDSインスタンスに対して、一部の拡張機能を作成できなくなりました。 詳細については、「 [製品の変更 /機能の変更] ApsaraDB RDS For PostgreSQLインスタンスの拡張機能作成の制限」をご参照ください。
20230830より前のマイナーエンジンバージョンを実行するRDSインスタンスの拡張機能を作成した場合、その拡張機能は影響を受けません。
RDSインスタンスの拡張機能を初めて作成する場合、または拡張機能を再作成する場合は、RDSインスタンスのマイナーエンジンバージョンを最新バージョンに更新する必要があります。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
zhparserは、RDSインスタンスのshared_preload_librariesパラメーターの値に追加されます。
zhparser拡張子の名前をshared_preload_librariesパラメーターの値に追加する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
背景情報
オープンソースのPostgreSQLは、英語などの言語でテキストをセグメント化できる組み込みのパーサー拡張機能を提供します。 ただし、中国語のテキストには単語間にスペースがなく、セマンティクスに基づいてセグメント化する必要があり、テキストの長さは固定されていません。 したがって、中国語でテキストをセグメント化するには、パーサー拡張ではなくzhparser拡張を使用することをお勧めします。
PostgreSQLのzhparser拡張機能は、テキストを中国語でセグメント化できます。 RDSインスタンスにzhparser拡張機能をインストールした後、RDSインスタンスで中国語の全文検索を実行できます。
zhparser拡張を有効にする
次のステートメントを実行して、zhparser拡張機能を有効にします。
拡張zhparserを作成します。テキスト検索構成の作成testzhcfg (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION testzhcfgは、n、v、a、i、e、lのマッピングを単純に追加します。-オプションのパラメーター設定
alter role all set zhparser.multi_short=on;
-- 簡単なテスト
SELECT * FROM ts_parse('zhparser' 、'hello world! 2010城、2011年、、攻撃的な攻撃的な攻撃的条件。';
SELECT to_tsvector('testzhcfg','",, 。" 陈国强要。他の指, 2011年相, 2012。');
SELECT to_tsquery('testzhcfg' 、'学業業業業業業業業');
次のステートメントを実行して、zhparser拡張機能でフルテキスト検索を実行できるようにします。
t1テーブルのnameフィールドのフルテキストインデックスを作成します。 SQL文のt1とnameを、ビジネス要件に基づいて実際のテーブル名とフィールド値に置き換える必要があります。
gin (to_tsvector('testzhcfg' 、upper(name) )) を使用してt1にインデックスidx_t1を作成します。-フルテキストインデックスを使用します。
select * from t1 where to_tsvector('testzhcfg' 、uppe r(t1.name) @ @ to_tsquery('testzhcfg' 、'(防火)') ;
中国語の単語分割辞書のカスタマイズ
次の文を実行して、中国語の単語分割辞書をカスタマイズします。
-- セグメンテーション結果
SELECT to_tsquery('testzhcfg' 、'学業業業業業業業業');
-辞書に新しい単語セグメントを挿入します
pg_ts_custom_wordの値に挿入します ('保房');
-挿入された単語セグメントを有効にする
zhprs_sync_dict_xdb() を選択します。-接続を終了する
\c
-新しいセグメンテーション結果を取得するための要求
SELECT to_tsquery('testzhcfg' 、'学業業業業業業業業');
- 最大 100 万のカスタム単語セグメントを追加できます。 単語セグメントの数が制限を超えた場合、制限外の単語セグメントは処理されません。 単語セグメントの数がこの範囲内であることを確認してください。 カスタムおよびデフォルトの単語分割辞書が同時に有効になります。
- 各単語セグメントは、最大 128 バイトである必要があります。 128 バイト以降のセクションは切り捨てられます。
- 単語セグメントを追加、削除、または変更した後、
select zhprs_sync_dict_xdb();
ステートメントを実行し、接続を再確立して操作を有効にします。