Ik ben de auteur en onderhouder van pg_search.
Helaas splitst PostgreSQL's tsearch standaard geen e-mailadressen op, zodat u onderdelen kunt vergelijken. Het zou kunnen werken als je :trigram
. hebt ingeschakeld zoek echter, omdat het overeenkomt met willekeurige subtekenreeksen die overal in de doorzoekbare tekst voorkomen.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Ik heb dit bevestigd door het volgende commando in psql uit te voeren:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Ik weet dat de parser e-mailadressen detecteert, dus ik denk dat het mogelijk moet zijn. Maar het zou gaan om het bouwen van een woordenboek voor tekstzoeken in PostgreSQL die het e-mailadres correct zou opsplitsen in tokens.
Hier is bewijs dat de tekstzoek-parser weet dat het een e-mailadres is:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)