2017-11-17 8 views
6

私のpostgresデータベースでフルテキスト検索を実行するにはpg_searchのgemを使用しています。私は、文字列GROで検索すると、私は正確に言葉グロに一致するレコードがグループのような言葉に一致するレコードよりも高いランクを持っていることをpg_search gemとフルテキスト検索のランク設定

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

たい:私はこのようなスコープまし グループは、gloを含む)。

これを行うにはいくつかの設定がありますか?

答えて

3

私はDjangoで非常によく似た状況にあり、トリグラムの類似性とtsearchランクの合計を解決しました。私はルビーの専門家ではない

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

が、私はpg_searchドキュメントを読んでいると私は思う:あなたはPostgresSQLの上で確認することができますよう完全一致と単語と

類似性は、部分一致よりも高く、あなたの質問に対する解決策は、これと似ています:

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