按列重量对弹性搜索进行排序,结果是用于轨道项目的轮胎宝石

时间:2013-12-17 10:02:54

标签: ruby-on-rails elasticsearch tire

def self.search(params)
  return [] unless params[:query].present?
   tire.search(load: true) do
   query { string(params[:query], fields: %w(title description topics     
   username discussions)) }
  sort do
    by "likes", "desc"
    by "badges_count", "desc"
  end
  facet :tags do
    terms :tags
  end

  facet :topics do
    terms :topics
  end

    size params[:size] || 5
   end.results
end

我正在尝试对特定型号进行搜索。虽然结果目前正在根据最喜欢的方式进行排序,但我希望以排序块中每列的百分比为基础进行排序。

例如:

基于另一列(:标题)中语义匹配强度的“喜欢”50% 基于“badges_count”的“badges_count”为20%

任何帮助都会很棒,因为我有点不知道如何更多地扩展块并创建一个基于重量排序的迷你算法。

1 个答案:

答案 0 :(得分:0)

使用提升选项为列编制索引。 例如:

class YourParticularModel
  mapping do
    indexes :likes,           boost: 100
    indexes :badges_count,    boost: 40
    # .... other indexes
  end
end

然后从搜索方法中删除排序。查询结果将自动加权喜欢和badges_count匹配。