pg_search gem 和全文搜索排名设置

pg_search gem and fulltext search rank setting

我正在使用 gem pg_search 在我的 postgres 数据库上执行全文搜索。 我有一个这样的范围:

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

当我使用字符串 gro 进行搜索时,我希望与 gro 完全匹配的记录的排名高于匹配像 group 这样的词(group 包含 gro)。

知道吗,是否有一些设置可以做到这一点?

我在 Django 中遇到了非常相似的情况,我解决了总结 trigram 相似度和 tsearch 排名的问题。

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

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

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

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