pg_search gem和全文搜索排名设置

时间:2017-11-17 15:45:19

标签: ruby-on-rails postgresql full-text-search pg-search

我使用gem pg_search在我的postgres db上执行全文搜索。 我的范围是这样的:

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

当我使用字符串 gro 进行搜索时,我希望与 gro 字符匹配的记录的排名高于匹配 group <等单词的记录/ em>( group 包含 gro )。

任何想法,如果有一些设置可以做到这一点?

1 个答案:

答案 0 :(得分:3)

我在Django中有一个非常相似的情况,我解决了对三元组相似性和tsearch排名的总结。

与完全匹配的单词的相似性高于部分匹配,因为您可以查看PostgresSQL:

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

我不是红宝石专家,但我已阅读pg_search文档,我认为您的问题的解决方案应与此类似:

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