ドキュメント Word_similarity関数について と言う:
最初の文字列と2番目の文字列の最も類似したWordとの類似性を示す数値を返します。この関数は、2番目の文字列で、最も類似した部分文字列ではなく、最も類似した単語を検索します。結果の範囲は0(2つの文字列が完全に異なることを示す)から1(最初の文字列が2番目の文字列の単語の1つと同じであることを示す)です。
しかし、「最初の文字列」に複数の単語が含まれている場合の結果は、あいまいです。次の結果の説明は何ですか?
select Word_similarity('foo bar','foo bar baz');
|単語の類似性| | :----------- | 1 |
select Word_similarity('baz bar','foo bar baz');
|単語の類似性| | :-------------- | | 1 |
select Word_similarity('baz foo','foo bar baz');
|単語の類似性| | :-------------- | | 0.8 |
dbfiddle ---(ここ
2017-2018のメーリングリストのスレッド のように動作しません。
2番目の文字列のトライグラムの連続範囲を(元の順序で)検索します。これは、最初の文字列のトライグラムと最も類似しています。可能な解決策は、この範囲の境界をWordの境界にすることです。ただし、Wordのpartを検索する方が便利ではありません。そして、私たちはすでにユーザーにこの機能を採用させています。
解決策は pg_trgm
1.4 with new features をリリースすることでした。これはPostgreSQL 11で削除される予定です。エクステント境界を強制的にWord境界にするstrict_Word_similarity
を提供します。さらに、2つの新しい演算子<<<->
と<<%
が追加され、インデックスに対して厳密なWord範囲の操作が実行されます。
詳細については、 開発バージョンpg_trgm
のドキュメントを参照してください。