sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL全文検索とトリグラムの混乱

    それらは非常に異なる目的を果たします。

    • 全文検索は、語幹単語の検索クエリに一致するドキュメントを返すために使用されます。
    • トライグラムは、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 フィールド。

    テキストインデックスを一致させたい一般的なスペルミスの単語/フレーズがある場合は、類義語辞書を確認することをお勧めします




    1. OracleODBCドライバーでSQLServerを使用しているときに誤ったブックマーク序数エラーが発生した場合の対処方法

    2. 初心者向けのSQLDROPCOLUMN

    3. MySQLの複数のテーブルからのCOUNT(*)

    4. 複数のテーブルを検索し、結果の行にテーブル名を表示します