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 サイトの他の関連記事を参照してください。