我使用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 )。
任何想法,如果有一些设置可以做到这一点?
答案 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"