トリグラム類似度演算子 % を使用して、PostgreSQL で (WHERE 句で) あいまい一致フィルタリングを実行する必要があります。フィールド ペアの比較は単純table1.field1 % table2.field2
で、GIN または GIST インデックスを使用してパフォーマンスを大幅に向上させることができます。ただし、一度に多数のフィールドを比較する必要があり、最終的な結論は全体的な類似性に基づく必要があります。そのために、次のような連結式を使用できます。
(COALESCE (l.field1, ' ')
|| ' ' || COALESCE (l.field2,' ')
|| ' ' || COALESCE (l.field3,' ')
|| ' ' || COALESCE (l.field4,' ')
) % (COALESCE (r.field1, ' ')
|| ' ' || COALESCE (r.field2,' ')
|| ' ' || COALESCE (r.field3,' ')
|| ' ' || COALESCE (r.field4,' '))
ただし、この式は、個々のフィールドで GIN または GIST インデックスを利用できず、パフォーマンスが低下します。もちろん、明白な解決策は、両方のテーブルに新しい連結フィールドを作成し、それらに GIN インデックスを作成してから、連結フィールドを比較することです。
l.concatenated_field % r.concatenated_field
この場合、GIN または GIST インデックスが使用されています。しかし、さまざまな理由から、このソリューションには満足できず、個々のフィールド GIN または GIST インデックスが使用されるトライグラム演算子 (%) を使用して複数列の類似性比較を実行する別の方法があるのではないかと考えていました。