私は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)