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

AnalyticDB:ストップワード辞書の構成

最終更新日:Mar 28, 2026

ストップワードとは、「の」「は」「the」など、検索価値が低く、高頻度で出現する一般的な語です。ストップワード省略を適用しない場合、検索クエリ「同一个世界」に対してすべてのトークンが同等に扱われます。ストップワードを構成することで、Jieba トークナイザーは文書を区別する重要な語にフォーカスし、BM25 検索の関連性およびクエリ実行性能を向上させます。

pgsearch 拡張には、中国語向けの組み込みストップワード辞書 CN_SIMPLE と英語向けの EN_SIMPLE の 2 つが含まれています。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • AnalyticDB for PostgreSQL V7.0 インスタンスがマイナーバージョン V7.2.1.0 以降で実行中であること

インスタンスのマイナーバージョンを確認するには、「インスタンスのマイナーバージョンを表示する」をご参照ください。スペックアップするには、「UpgradeDBVersion」をご参照ください。

ストップワードの管理

ストップワード辞書は、pgsearch.stopword_dict テーブルに格納されます。dict 列には辞書名が、word 列にはストップワードが格納されます。これら 2 つの列は複合プライマリキーを構成するため、同一辞書内での重複したストップワードは許可されません。

Jieba トークナイザーはデフォルトで default という名前の辞書を使用します。1 つのインスタンスには複数のストップワード辞書を設定できます。

ストップワードの追加

ストップワードを追加する際は、必ず辞書名を指定してください。指定された辞書が存在しない場合(常に存在する default を除く)、pgsearch が自動的に該当辞書を作成し、その中にストップワードを追加します。

デフォルト 辞書にストップワードを追加します:

INSERT INTO pgsearch.stopword_dict(dict, word) VALUES('default', '的');

カスタム辞書 user_stop_cn にストップワードを追加します:

INSERT INTO pgsearch.stopword_dict(dict, word) VALUES('user_stop_cn', '的');

ストップワードの更新

default」辞書内のストップワードを更新します:

UPDATE pgsearch.stopword_dict SET word = '一个' WHERE dict = 'default' AND word = '的';

user_stop_cn 辞書内のストップワードを更新します:

UPDATE pgsearch.stopword_dict SET word = '一个' WHERE dict = 'user_stop_cn' AND word = '的';

ストップワードの削除

default 辞書からストップワードを削除します:

DELETE FROM pgsearch.stopword_dict WHERE dict = 'default' AND word = '的';

user_stop_cn 辞書からストップワードを削除する:

DELETE FROM pgsearch.stopword_dict WHERE dict = 'user_stop_cn' AND word = '的';
説明

UPDATE 文または DELETE 文で dict フィルターを省略すると、pgsearch はすべての辞書をスキャンし、該当するすべてのストップワードを変更します。

辞書の再読み込み

辞書を更新した後は、メモリへ再読み込みしてください。

SELECT pgsearch.reload_stopword_dict('user_stop_cn');
重要

辞書の再読み込みでは、既存のインデックス済みデータは自動的に更新されません。新しいストップワード構成を既存データに適用するには、以下の手順を順に実行してください。

  1. すべての既存データベース接続を終了し、再接続します。

  2. 影響を受けるテーブルのインデックスを再構築します。

ストップワード辞書を指定した BM25 インデックスの作成

BM25 インデックスを作成する際は、stopword パラメーターを使用して、Jieba トークナイザーにストップワード辞書を割り当てます。

CALL pgsearch.create_bm25(
    index_name => '<index_name>',
    table_name => '<table_name>',
    text_fields => pgsearch.field('<column_name>', tokenizer => pgsearch.tokenizer('jieba', SEARCH => false, dict => '<dict_name>', stopword => '<stopword_dict_name>'))
);

プレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<index_name>作成する BM25 インデックスの名前my_bm25_index
<table_name>インデックス対象のテーブルarticles
<column_name>インデックス対象のテキストカラムcontent
<dict_name>Jieba 分かち書き用辞書default
<stopword_dict_name>適用するストップワード辞書user_stop_cn

ストップワード省略の確認

以下のクエリを実行して、ストップワードが正しく省略されていることを確認します。この例では、入力文字列 同一个世界 に対して user_stop_cn 辞書が使用されています。

SELECT pgsearch.tokenizer(pgsearch.tokenizer('jieba', stopword => 'user_stop_cn'), '同一个世界');

関連トピック