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

部分文字列にpg_searchgemを使用したレール上のPG全文検索

    私はpg_searchの作成者およびメンテナーです。

    残念ながら、PostgreSQLのtsearchはデフォルトでは電子メールアドレスを分割せず、パーツと照合することができます。 :trigramをオンにすると機能する場合があります ただし、検索可能なテキストの任意の場所に表示される任意のサブ文字列と一致するため、検索します。

    pg_search_scope :search_by_detail,
                    :against => [
                      [:first_name,'A'],
                      [:last_name,'B'],
                      [:email,'C']
                    ],
                    :using => {
                      :tsearch => {:prefix => true},
                      :trigram => {}
                    }
    

    psqlで次のコマンドを実行してこれを確認しました:

    grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
     ?column? 
    ----------
     f
    (1 row)
    

    パーサーが電子メールアドレスを検出することを知っているので、それは可能であるに違いないと思います。ただし、テキスト検索辞書 を作成する必要があります。 PostgreSQLでは、メールアドレスをトークンに適切に分割します。

    これは、テキスト検索パーサーがそれが電子メールアドレスであることを知っているという証拠です:

    grant=# SELECT ts_debug('english', '[email protected]');
                                      ts_debug                                   
    -----------------------------------------------------------------------------
     (email,"Email address",[email protected],{simple},simple,{[email protected]})
    (1 row)
    



    1. WHERE句のさまざまな組み合わせのインデックス作成戦略。テキストパターン

    2. PRIMARY KEYでJOINを使用する場合、どのインデックスを使用する必要がありますか

    3. MySQL LOG10()関数–値の常用対数を返します

    4. まだ存在しない場合は、テーブルに列を追加します