2013-10-03 6 views
0

У меня есть модель категории со многими темами. В каждой теме много сообщений. Сообщения имеют поля «рейтинг» (float) и «created_at» (DateTime).Искать по году с Thinking Sphinx

Я использую Thinking Sphinx для поиска различных полей в категории, и я пытаюсь добавить немного более сложный поиск.

Я бы хотел найти категории с рейтингом, например, ниже 4.5 для сообщений только в этом году. Другой пример будет найти категории с рейтингом выше 6.7 сообщения от 2009 года и т.д.

До сих пор я создал индексацию так:

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» по данному году.

Любая помощь будет оценена по достоинству.

ответ

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 
+0

Это именно то, что я искал! Большое вам спасибо за помощь. Это намного более элегантно, чем мое текущее решение :) – zeth

Смежные вопросы