探索:搜索多次出现类似于搜索查询的文字时,他们的排名会高于一次完全匹配的文字。
示例:说搜索查询“生产力”,然后“有机产品的生产”的排名高于“人工”生产力“只是因为它包含两个相似的单词,但没有确切的单词匹配。
问题:确定具有完全匹配的记录的优先顺序的最佳方法是什么?
这是我的pg_scope:
pg_search_scope :search,
:against => {
:title => 'A',
:search_string => 'B'
},
:using => {
:tsearch => {
:dictionary => 'english',
:any_word => 'true'
}
}
THX。
答案 0 :(得分:0)
如果您可以操纵搜索查询,请浏览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
。