使用Thinking Sphinx搜索年份

时间:2013-10-03 10:49:59

标签: ruby-on-rails thinking-sphinx

我有很多主题的分类模型。每个主题都有很多帖子。帖子有字段'rating'(浮动)和'created_at'(DateTime)。

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

我想查找仅对今年的帖子进行评级的类别,例如低于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'的帖子。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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