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"
我正在使用 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"