vre*_*sys 6 postgresql activerecord ruby-on-rails pg-search
Probem:当搜索具有多个类似于搜索查询的单词的文本时,它们的排名高于具有一个完全匹配的文本.
示例:假设搜索查询是"生产力",那么"有机产品的生产"获得的排名高于"劳动生产率",因为它包含两个相似的单词,尽管没有确切的单词匹配.
问题:确定具有完全匹配的记录的优先级的最佳方法是什么?
这是我的pg_scope:
pg_search_scope :search,
:against => {
:title => 'A',
:search_string => 'B'
},
:using => {
:tsearch => {
:dictionary => 'english',
:any_word => 'true'
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
如果您可以操作搜索查询,请查看覆盖密度排名(ts_rank_cd()而不是ts_rank())及其normalization参数。
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)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何设置pg_search_scopecustom normalization。
或者,您可能也对搜索感兴趣,它们提供更准确(逐个字符)的结果。trigram
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |