Je suis l'auteur et le mainteneur de pg_search.
Malheureusement, le tsearch de PostgreSQL ne divise pas par défaut les adresses e-mail et ne vous permet pas de faire correspondre des parties. Cela pourrait fonctionner si vous avez activé :trigram
rechercher, car il correspond à des sous-chaînes arbitraires qui apparaissent n'importe où dans le texte interrogeable.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Je l'ai confirmé en exécutant la commande suivante dans psql :
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Je sais que l'analyseur détecte les adresses e-mail, donc je pense que cela doit être possible. Mais cela impliquerait de construire un dictionnaire de recherche de texte dans PostgreSQL qui diviserait correctement l'adresse e-mail en jetons.
Voici la preuve que l'analyseur de recherche de texte sait qu'il s'agit d'une adresse e-mail :
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)