Jsem autorem a správcem pg_search.
Bohužel tsearch PostgreSQL ve výchozím nastavení nerozděluje e-mailové adresy a neumožňuje vám porovnávat části. Mohlo by to fungovat, pokud jste zapnuli :trigram
hledat, protože odpovídá libovolným podřetězcům, které se objevují kdekoli v prohledávaném textu.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Potvrdil jsem to spuštěním následujícího příkazu v psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Vím, že parser detekuje e-mailové adresy, takže si myslím, že to musí být možné. Zahrnovalo by to však vytvoření slovníku pro vyhledávání textu v PostgreSQL, který by správně rozdělil e-mailovou adresu na tokeny.
Zde je důkaz, že analyzátor textového vyhledávání ví, že se jedná o e-mailovou adresu:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)