ホームページ > データベース > mysql チュートリアル > PostgreSQL の pg_trgm モジュールは大規模なデータセット内で類似の文字列を効率的に見つけるにはどうすればよいでしょうか?

PostgreSQL の pg_trgm モジュールは大規模なデータセット内で類似の文字列を効率的に見つけるにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2025-01-05 12:29:40
オリジナル
564 人が閲覧しました

How Can PostgreSQL's pg_trgm Module Efficiently Find Similar Strings in Large Datasets?

PostgreSQL で類似の文字列を素早く検索する

テキスト検索における一般的な要件の 1 つは、指定された入力文字列に類似した文字列を検索することです。 。 PostgreSQL は、この目的のために pg_trgm モジュールを提供します。ただし、大規模なデータセットを扱う場合、文字列のペアごとに類似性スコアを計算する総当り的なアプローチは非効率になる可能性があります。

従来のアプローチでは、インデックス演算子として gist_trgm_ops を使用して name 列に GiST インデックスを作成します。 。このアプローチの問題は、要素のペアごとに類似性スコアを計算する必要があり、二次時間計算量が必要になることです。

より効率的な解決策は、pg_trgm が提供する % 演算子を使用することです。 。 pg_trgm.similarity_threshold パラメーターを事前定義された値 (0.8 など) に設定すると、オプティマイザーはトライグラム GiST インデックスを使用して、指定された類似性しきい値を下回る候補ペアをフィルターで除外できます。これにより、必要な類似度計算の数が大幅に削減され、クエリのパフォーマンスが向上します。

SET pg_trgm.similarity_threshold = 0.8;

SELECT similarity(n1.name, n2.name) AS sim, n1.name, n2.name
FROM   names n1
JOIN   names n2 ON n1.name <> n2.name
               AND n1.name % n2.name
ORDER  BY sim DESC;
ログイン後にコピー

この最適化されたクエリでは、類似性スコアを計算する前に % 演算子を使用して候補ペアを事前にフィルタリングし、クエリのパフォーマンスが大幅に向上します。

以上がPostgreSQL の pg_trgm モジュールは大規模なデータセット内で類似の文字列を効率的に見つけるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート