Jag är författare och underhållare av pg_search.
Tyvärr delar PostgreSQL:s tsearch som standard inte upp e-postadresser och låter dig matcha mot delar. Det kan fungera om du aktiverar :trigram
sök dock eftersom det matchar godtyckliga delsträngar som visas var som helst i den sökbara texten.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Jag bekräftade detta genom att köra följande kommando i psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Jag vet att parsern upptäcker e-postadresser, så jag tror att det måste vara möjligt. Men det skulle innebära att bygga en textsökordbok i PostgreSQL som korrekt skulle dela upp e-postadressen i tokens.
Här är bevis på att textsökningstolken vet att det är en e-postadress:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)