Tôi là tác giả và người duy trì pg_search.
Thật không may, theo mặc định, tsearch của PostgreSQL không chia nhỏ các địa chỉ email và cho phép bạn so khớp với các phần. Nó có thể hoạt động nếu bạn bật :trigram
tuy nhiên, tìm kiếm vì nó khớp với các chuỗi con tùy ý xuất hiện ở bất kỳ đâu trong văn bản có thể tìm kiếm được.
pg_search_scope :search_by_detail,
:against => [
[:first_name,'A'],
[:last_name,'B'],
[:email,'C']
],
:using => {
:tsearch => {:prefix => true},
:trigram => {}
}
Tôi đã xác nhận điều này bằng cách chạy lệnh sau trong psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
?column?
----------
f
(1 row)
Tôi biết rằng trình phân tích cú pháp có phát hiện địa chỉ email, vì vậy tôi nghĩ rằng nó phải có thể. Nhưng nó sẽ liên quan đến việc xây dựng từ điển tìm kiếm văn bản trong PostgreSQL sẽ chia địa chỉ email thành các mã thông báo một cách chính xác.
Đây là bằng chứng cho thấy trình phân tích cú pháp tìm kiếm văn bản biết rằng đó là một địa chỉ email:
grant=# SELECT ts_debug('english', '[email protected]');
ts_debug
-----------------------------------------------------------------------------
(email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)