2017-11-17 74 views
6

Im sử dụng đá quý pg_search để thực hiện tìm kiếm toàn văn trên db bưu chính của tôi. Tôi đã một phạm vi như thế này:đá quý pg_search và cài đặt xếp hạng tìm kiếm toàn văn

pg_search_scope :fulltext, against: [:firstname, :lastname, :middlename], 
       using: { 
        tsearch: { prefix: true }, 
        trigram: { 
         :threshold => 0.2 
        } 
        } 

Khi tôi tìm kiếm với chuỗi Gro Tôi muốn rằng các sổ sách phù hợp với chính xác từ Gro có thứ hạng cao hơn so với hồ sơ phù hợp với những từ như nhóm (nhóm chứa gro).

Bất kỳ ý tưởng nào, nếu có một số cài đặt để thực hiện việc này?

Trả lời

3

Tôi đã có một tình huống rất giống nhau ở Django và tôi đã giải quyết tổng hợp điểm tương đồng và xếp hạng trigram.

tương đồng với từ với kết hợp chính xác cao hơn so với một trận đấu một phần, như bạn có thể kiểm tra trên Postgressql:

SELECT similarity('gro', 'gro') AS exact, similarity('gro', 'group') AS partial; 
exact | partial 
-------+---------- 
    1 | 0.428571 

Tôi không phải là một chuyên gia ruby ​​nhưng tôi đã đọc tài liệu pg_search và tôi nghĩ rằng giải pháp cho câu hỏi của bạn nên tương tự như sau:

pg_search_scope :fulltext, 
       against: [:firstname, :lastname, :middlename], 
       using: { 
        tsearch: { prefix: true }, 
        trigram: { 
         :threshold => 0.2 
        } 
       }, 
       :ranked_by => ":tsearch + :trigram" 
Các vấn đề liên quan