0

我有许多主题的类别模型。每个主题都有许多帖子。帖子有字段“rating”(浮动)和“created_at”(DateTime)。

我正在使用 Thinking Sphinx 搜索类别中的不同字段,并且我正在尝试添加更复杂的搜索选项。

我想为今年的帖子查找评分例如低于 4.5 的类别。其他示例是为 2009 年等的帖子查找评分高于 6.7 的类别。

到目前为止,我创建了这样的索引:

indexes posts(:rating), as: :rating, type: :decimal
has 'SUM(rating)', as: :total_rating, type: :float

并且可以使用以下方法获取带有帖子评级的类别:

Category.search(with: { total_rating: 0..4.5 })

但我不知道是否可以限制给定年份用于“total_rating”的帖子。

任何帮助,将不胜感激。

4

1 回答 1

0

恐怕我不确定是否有一种优雅的方式来做到这一点。我能想到的唯一选择是在您的索引定义中是这样的:

(2008..Date.today.year).each do |year|
  has "SUM(CASE WHEN YEAR(posts.created_at) = #{year} THEN rating ELSE 0 END",
    as: "total_rating_for_#{year}".to_sym, type: :float
end
于 2013-10-06T05:48:57.603 回答