ruby-on-rails - pg_search gem 和全文搜索排名设置

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

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

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

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

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

最佳答案

我在 Django 中遇到了非常相似的情况,我解决了总结三元组相似度和 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"

关于ruby-on-rails - pg_search gem 和全文搜索排名设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47354358/

相关文章:

ruby-on-rails - Rails 模型关系,有多个且属于多个?

ruby-on-rails - 如何从 Rails 中的多个表关联中获取数据?

sql - 重新编号重复项,使它们独一无二

javascript - 获取 HTML 元素的完整(原始)文本

mysql - 对部分匹配执行全文搜索,其中最短匹配在 MySQL 中具有最高相关性?

sql - 将数组传递给 Postgres 中的 tsvector 触发函数

javascript - 限制文本区域中的字符数,用于 Javascript 的 Rails

ruby-on-rails - 项目创建后Rails服务器启动报错

django - 在 Django 中过滤 jsonfield 的字典列表

sql - 在 Postgres 中将十六进制字符串转换为 bigint