探查:当搜索与搜索查询相似的多次出现单词的文本时,它们的排名要比完全匹配的文本更高。

示例:假设搜索查询为“生产力”,则“有机产品的生产”比“劳动生产率”的排名更高,仅因为它包含两个相似的单词,尽管没有完全匹配的单词。

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

这是我的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,它们提供了更准确的结果(逐字符)。

10-08 04:43