Hãy nói rằng bạn có một postgres 8,3 bảng như sau:Làm thế nào để bạn thực hiện tìm kiếm toàn văn dựa trên cụm từ trong postgres tận dụng lợi thế của chỉ mục toàn văn?
CREATE TABLE t1 (body text, body_vector tsvector);
Tôi muốn để có thể tìm kiếm nó cho các cụm từ bằng cách sử dụng chỉ mục toàn văn bản (GIST, Gin hoặc cả hai trên cột tsvector). Cách giải quyết tốt nhất mà tôi đã có thể tìm thấy đầu tiên là tìm kiếm toàn văn trên cả hai từ (boolean AND) và sau đó thực hiện so sánh tương tự trên phần thân của cụm từ. Tất nhiên, điều này không nắm bắt được bất kỳ kiểm tra gốc hoặc kiểm tra lỗi chính tả nào mà tìm kiếm toàn văn của postgres làm cho bạn. Một ví dụ của việc này là nếu tôi đang tìm kiếm cụm từ 'W1 W2', tôi muốn sử dụng:
SELECT * FROM t1 WHERE body_vector @@ 'w1 & w2'::tsquery AND body LIKE 'w1 w2';
Có cách nào để làm điều này mà bạn không cần phải nghỉ mát để tìm kiếm trên cột văn bản?
Có lẽ tôi đã không nắm bắt được mọi thứ, nhưng điều này không yêu cầu chuỗi đầu vào phải chứa cụm từ tìm kiếm giữa các dấu nháy đơn? Làm thế nào có thể bất cứ ai sử dụng nó nói chung, khi cụm từ đến từ đầu vào của người dùng, và tài liệu đến từ một cột cơ sở dữ liệu? –
Đây vẫn chưa phải là "tìm kiếm cụm từ". Đó là chỉ làm việc kể từ khi cụm từ tsvector của bạn 'new york' được gói trong dấu nháy đơn. – soyayix
Có cả hai chức năng không - nhưng chuỗi tsvector của bạn trong hầu hết các trường hợp sẽ không có dấu nháy đơn trên chúng - nếu có thì cụm từ tìm kiếm là gì .. Tôi có postgreSQL 9.4 và truy vấn bạn làm việc - đây không chỉ là cụ thể là 9.6. chọn 'i heart new york city' :: tsvector @@ 'new' :: tsquery, --true 'i heart new york city' :: tsvector @@ 'new & york' :: tsquery, - true 'i heart new york city' :: tsvector @@ '' 'new york' '' :: tsquery --false – soyayix