Saya penulis dan pengelola pg_search.
Sayangnya, tsearch PostgreSQL secara default tidak membagi alamat email dan memungkinkan Anda untuk mencocokkan dengan bagian-bagiannya. Mungkin berhasil jika Anda mengaktifkan :trigram
cari, karena cocok dengan sub-string arbitrer yang muncul di mana saja dalam teks yang dapat dicari.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Saya mengkonfirmasi ini dengan menjalankan perintah berikut di psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Saya tahu bahwa parser mendeteksi alamat email, jadi saya pikir itu mungkin. Tapi itu akan melibatkan pembuatan kamus penelusuran teks di PostgreSQL yang akan membagi alamat email menjadi token dengan benar.
Berikut adalah bukti bahwa pengurai pencarian teks mengetahui bahwa itu adalah alamat email:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)