2017-11-17 1 views
6

내내 postgres 데이터베이스에서 전체 텍스트 검색을 수행하는 보석을 사용하여. 나는했습니다과 같은 범위 : 내가 문자열을 검색 할 때pg_search 보석 및 전체 텍스트 검색 순위 설정

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

촉진제 내가 정확하게 단어 촉진제 일치하는 레코드가 그룹과 같은 단어와 일치하는 기록보다 더 높은 순위를 가지고 싶습니다 (그룹에는 gro이 포함됩니다).

어떤 설정이 있습니다.

답변

3

나는 Django에서 매우 유사한 상황을 보였고 나는 trigram 유사성과 tsearch 순위를 요약 해 보았다. 내가 루비 전문가가 아니에요

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

하지만 난 pg_search 문서를 읽었습니다 그리고 내가 생각 : 당신이 포스트그레스 SQL에서 확인할 수로 정확히 일치하는 단어와

유사성은 부분 일치보다 높은 귀하의 질문에 대한 해결책은 다음과 유사해야합니다.

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