Truy vấn đầu tiên của bạn khá gần. Để loại bỏ các gốc không mong muốn, tạo một cấu hình tìm kiếm văn bản với một từ điển đơn giản không làm điều đó.
Tôi đề nghị sử dụng một lược đồ riêng cho các đối tượng tìm kiếm văn bản, nhưng đó hoàn toàn là tùy chọn:
CREATE SCHEMA ts;
GRANT USAGE ON SCHEMA ts TO public;
COMMENT ON SCHEMA ts IS 'text search objects';
CREATE TEXT SEARCH DICTIONARY ts.english_simple_dict (
TEMPLATE = pg_catalog.simple
, STOPWORDS = english
);
CREATE TEXT SEARCH CONFIGURATION ts.english_simple (COPY = simple);
ALTER TEXT SEARCH CONFIGURATION ts.english_simple
ALTER MAPPING FOR asciiword WITH ts.english_simple_dict; -- 1, 'Word, all ASCII'
Sau đó, truy vấn của bạn cũng hoạt động và rất nhanh:
SELECT *
FROM ts_stat($$SELECT to_tsvector('ts.english_simple', title) FROM item$$)
ORDER BY ndoc DESC
LIMIT 50;
dbfiddle ở đây
Điều này hoạt động với các từ viết thường mà không xuất phát và không ngắt cho các chữ cái không phải ASCII.
Backgroud
Đọc chương Từ điển đơn giản trong hướng dẫn.
Định nghĩa chính xác của một "từ" là một vấn đề khó khăn. Trình phân tích cú pháp tìm kiếm văn bản mặc định (hiện tại là duy nhất) xác định 23 loại mã thông báo khác nhau. Xem:
SELECT * FROM ts_token_type('default');
Các cấu hình tìm kiếm văn bản tích hợp ánh xạ hầu hết các từ điển (tích hợp). Ánh xạ cho english
cấu hình:
SELECT tt.*, m.mapdict::regdictionary AS dictionary
FROM pg_ts_config_map m
LEFT JOIN ts_token_type(3722) tt ON tt.tokid = m.maptokentype
WHERE mapcfg = 'english'::regconfig -- 'ts.english_simple'::regconfig
ORDER BY tt.tokid;
Bản demo ở trên tạo ra một cấu hình mới dựa trên simple
cấu hình và vì tất cả các từ dừng tiếng Anh thuộc loại 'asciiword', chúng tôi chỉ cần ánh xạ loại này để loại bỏ các từ dừng, không xuất phát hoặc bất cứ thứ gì khác.
ts_debug()
rất tốn kém vì nó thực hiện rất nhiều công việc chúng ta không cần cho truy vấn. Thêm vào đó, điều này sẽ thất bại đối với các ký tự không phải ASCII. Và có lẽ chúng tôi cũng không muốn nó nhạy cảm. Trên thực tế, tất cả những gì chúng ta cần là một cấu hình tìm kiếm văn bản không xuất phát. Tôi đã thêm một giải pháp khác.