Аз съм авторът и поддържащият pg_search.
За съжаление, tsearch на PostgreSQL по подразбиране не разделя имейл адресите и не ви позволява да съпоставяте части. Може да работи, ако сте включили :trigram
търсене обаче, тъй като съвпада с произволни поднизове, които се появяват навсякъде в търсения текст.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Потвърдих това, като изпълних следната команда в psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Знам, че анализаторът открива имейл адреси, така че мисля, че трябва да е възможно. Но това ще включва изграждане на речник за текстово търсене в PostgreSQL, който правилно ще раздели имейл адреса на токени.
Ето доказателство, че анализаторът за текстово търсене знае, че това е имейл адрес:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)