6

问题:当搜索与搜索查询相似的单词多次出现的文本时,它们的排名高于具有一个完全匹配的文本。

示例:假设搜索查询是“生产力”,那么“有机产品生产”的排名高于“劳动生产力”,因为它包含两个相似的词,但没有完全匹配的词。

问题:对具有完全匹配的记录进行优先排序的最佳方法是什么?

这是我的 pg_scope:

  pg_search_scope :search,
                  :against => {
                    :title => 'A',
                    :search_string => 'B'
                  },
                  :using => {
                    :tsearch => {
                      :dictionary => 'english',
                      :any_word => 'true'
                    }
                  }

谢谢。

4

1 回答 1

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)

SQLFiddle

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

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

于 2014-06-27T10:07:57.740 回答