pg_search:如何确定单词匹配的优先顺序?

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)

谢谢.

poz*_*ozs 0

如果您可以操作搜索查询,请查看覆盖密度排名(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)

SQLFiddle

但是,我不确定如何设置pg_search_scopecustom normalization

或者,您可能也对搜索感兴趣,它们提供更准确(逐个字符)的结果。trigram