このトピックでは、AnalyticDB for PostgreSQLインスタンスにインストールされているpgsearch拡張機能を使用して、シノニム辞書を管理および使用する方法について説明します。
シノニムは検索で重要です。 同義語検索とベクトル検索は互いに補完的であり、一緒に使用すると検索の再現率を大幅に向上させることができます。 類義語は、検索に次の利点を提供します。
検索精度の向上。 検索キーワードを入力すると、入力したキーワードに関連する結果に別のキーワードやフレーズが含まれる場合があります。 類義語により、検索エンジンは関連するキーワードやフレーズを識別し、より正確な一致結果を返すことができます。
多言语サポート。 複数の言語または方言をサポートするアプリケーションの場合、同義語は語彙の違いを狭めたり排除したりするのに役立ちます。 たとえば、英語の単語とその中国語の単語は同義語です。
業界固有の用語でより良いマッチング。 特定の用語は、さまざまな産業または分野で使用されます。 類義語は、検索エンジンが用語と一般キーワードの関係を理解し、より正確なマッチング結果を返すのに役立ちます。
改善されたユーザーエクスペリエンス。 特定のキーワードがわからない、または一時的に忘れている場合は、シノニムを使用して目的の結果を得ることができます。
前提条件
V7.1.1.0以降のAnalyticDB for PostgreSQL V7.0インスタンスが作成されています。
pgsearch拡張機能がインスタンスにインストールされています。
説明pgsearch拡張機能がインスタンスにインストールされていない場合は、チケットを起票し、テクニカルサポートに拡張機能のインストールを依頼してください。 拡張機能をインストールしたら、インスタンスを再起動する必要があります。
シノニム辞書の管理
シノニム辞書の作成
pgsearch.synonyms_create() 関数を呼び出して、synonyms_idパラメーターで指定された一意のシノニム辞書IDを使用してシノニム辞書を作成します。
SELECT pgsearch.synonyms_create('<synonyms_id>');例
SELECT pgsearch.synonyms_create('warehouse');シノニム辞書の削除
pgsearch.synonyms_drop() 関数を呼び出して、一意のシノニム辞書IDを使用してシノニム辞書を削除します。
SELECT pgsearch.synonyms_drop('<synonyms_id>');例
SELECT pgsearch.synonyms_drop('warehouse');シノニム辞書へのデータの挿入と更新
pgsearch.synonyms_set() 関数を呼び出して、シノニム辞書にデータを挿入または更新 (既存のデータを上書き) します。 JSON形式のデータのみを挿入できます。 jsonb_dataパラメーターの値は、キーと値のペアで構成されます。 各キーは用語であり、対応する値はその用語の同義語のリストである。
SELECT pgsearch.synonyms_set('<synonyms_id>', '<jsonb_data>');例
-- Insert data into a synonym dictionary.
SELECT pgsearch.synonyms_set('warehouse',
'{"pc": ["personal computer", "laptop"],
"phone": ["telephone", "mobile"],
"apple": ["mac", "iphone"],
"shoes": ["socks", "boots"]}'
);
-- Update the synonym dictionary by replacing the synonyms (mac and iphone) of the term apple with apples.
SELECT pgsearch.synonyms_set('warehouse',
'{"apple": ["apples"]}'
);シノニム辞書の照会
pgsearch.synonyms_show()関数を呼び出して、すべてのシノニム辞書を照会します。SELECT * FROM pgsearch.synonyms_show();synonyms_list()関数を呼び出して、一意のシノニム辞書IDを使用してシノニム辞書に関する情報を照会します。 特定の用語のシノニムを照会するには、シノニム辞書パラメーターを使用して用語を指定します。-- Query information about a specific synonym dictionary. SELECT * FROM pgsearch.synonyms_list('<synonyms_id>') ORDER BY word; -- Query the synonyms of a specific term. SELECT * FROM pgsearch.synonyms_list('<synonyms_id>', '<word>')
シノニム辞書を使う
research.synonym_terms()関数を呼び出して、シノニム辞書を使用してクエリを実行します。 クエリが完了すると、valueパラメーターで指定された用語とその用語のシノニムを含む結果が返されます。pgsearch.synonym_terms(synonym_id => '<synonym_id>', field => '<field>', VALUE => '<value>')Parameters
synonym_id: シノニム辞書の一意のID。field: クエリを実行する列。value: クエリする用語。
例
倉庫同義語辞書の靴という用語の同義語は、靴下とブーツです。 次のステートメントを実行して、description列のshoes、socks、bootsを含む結果を照会できます。SELECT * FROM mock_items WHERE description @@ pgsearch.config( query => pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes') )pgsearch.synonym_terms()関数は、ブール検索やセット検索などの高度なクエリで使用できます。 高度なクエリの詳細については、使用方法ガイドの「高度なクエリ」セクションをご参照ください。例 1
本、靴、または靴のシノニムを含むが、説明列からスピーカーを含まない結果を取得します。
SELECT * FROM mock_items ORDER BY description @@ pgsearch.config( query => pgsearch.boolean( should => ARRAY[ pgsearch.term('description:book'), pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes') ], must_not => ARRAY[ pgsearch.term(field => 'description', VALUE => 'speaker') ] ) ) ;例 2
本、靴、または靴のシノニムを含む結果を説明列から取得します。
SELECT * FROM mock_items WHERE description @@ pgsearch.config( query => pgsearch.term_set( terms => ARRAY[ pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes'), pgsearch.term(field => 'description', VALUE => 'book') ] ) )