それらは非常に異なる目的を果たします。
- 全文検索は、語幹単語の検索クエリに一致するドキュメントを返すために使用されます。
- トライグラムは、2つの文字列を比較し、それらがどの程度類似しているかを判断する方法を提供します。
次の例を検討してください。
SELECT 'cat' % 'cats'; --true
'cat'
であるため、上記はtrueを返します。 'cats'
と非常によく似ています (pg_trgm制限によって指定されます)。
SELECT 'there is a cat with a dog' % 'cats'; --false
上記はfalse
を返します %
cats
という単語を検索するのではなく、2つの文字列全体を同様に検索します。 内 文字列。
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
これはtrue
を返します becauase tsvectorは、文字列を語幹のある単語のリストに変換し、一般的な単語の束を無視しました(ストップワード-'is'&'a'など)...次に、語幹バージョンのcats
を検索しました 。
トライグラムを使用して自動修正したいようです ts_query
しかし、それは実際には不可能です(とにかく効率的な方法ではありません)。彼らは実際には知らない ある単語のスペルが間違っているのは、別の単語とどれほど似ているかということです。彼らはできた 単語のテーブルを検索して類似の単語を検索し、「did you mean ...」タイプの機能を実装できるようにしますが、この単語では、search
フィールド。
テキストインデックスを一致させたい一般的なスペルミスの単語/フレーズがある場合は、類義語辞書を確認することをお勧めします