探查:当搜索与搜索查询相似的多次出现单词的文本时,它们的排名要比完全匹配的文本更高。
示例:假设搜索查询为“生产力”,则“有机产品的生产”比“劳动生产率”的排名更高,仅因为它包含两个相似的单词,尽管没有完全匹配的单词。
问题:对具有完全匹配项的记录进行优先级排序的最佳方法是什么?
这是我的pg_scope:
pg_search_scope :search,
:against => {
:title => 'A',
:search_string => 'B'
},
:using => {
:tsearch => {
:dictionary => 'english',
:any_word => 'true'
}
}
谢谢。
最佳答案
如果您可以操纵搜索查询,请浏览cover density ranking ( ts_rank_cd()
instead of ts_rank()
) and its normalization
parameter。
SELECT v, ts_rank(to_tsvector('english', v), to_tsquery('english', 'productivity')) rank,
ts_rank_cd(to_tsvector('english', v), to_tsquery('english', 'productivity')) rankcd,
ts_rank_cd(to_tsvector('english', v), to_tsquery('english', 'productivity'), 4) rankcd4,
ts_rank_cd(to_tsvector('english', v), to_tsquery('english', 'productivity'), 6) rankcd6
FROM (
VALUES ('production of organic products'::TEXT),
('labour productivity'),
('labour productivity with more unrelated words'),
('labour productivity with more unrelated words and again production'),
('production of productivity'),
('product production')
) d(v)
但是,我不确定如何使用自定义
pg_search_scope
设置normalization
。另外,您可能也对
trigram
感兴趣searches,它们提供了更准确的结果(逐字符)。