Soy el autor y mantenedor de pg_search.
Desafortunadamente, tsearch de PostgreSQL por defecto no divide las direcciones de correo electrónico y le permite compararlas con partes. Podría funcionar si activas :trigram
Sin embargo, busca, ya que coincide con subcadenas arbitrarias que aparecen en cualquier parte del texto que se puede buscar.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Lo confirmé ejecutando el siguiente comando en psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Sé que el analizador detecta direcciones de correo electrónico, así que creo que debe ser posible. Pero implicaría construir un diccionario de búsqueda de texto en PostgreSQL que dividiría correctamente la dirección de correo electrónico en tokens.
Aquí hay evidencia de que el analizador de búsqueda de texto sabe que es una dirección de correo electrónico:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)