Jestem autorem i opiekunem pg_search.
Niestety, tsearch PostgreSQL domyślnie nie dzieli adresów e-mail i pozwala na dopasowanie do części. Może zadziałać, jeśli włączysz :trigram
szukaj jednak, ponieważ dopasowuje dowolne podciągi, które pojawiają się w dowolnym miejscu w przeszukiwanym tekście.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Potwierdziłem to, uruchamiając następujące polecenie w psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Wiem, że parser wykrywa adresy e-mail, więc myślę, że musi to być możliwe. Ale wymagałoby to zbudowania słownika wyszukiwania tekstowego w PostgreSQL, który właściwie podzieli adres e-mail na tokeny.
Oto dowód, że parser wyszukiwania tekstu wie, że jest to adres e-mail:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)