Я наконец-то решил это, но он использует немного другой подход, но работает нормально.
Я пытался поместить поиск по диапазону дат в sphinx_scope (в модели) или как: условие или: с (в контроллере). Это не сработало, поэтому вместо этого мне пришлось реализовать его внутри define_index в модели.
Итак, я установил проверку в define_index, чтобы увидеть, попадает ли запись в диапазон дат, причем диапазон дат определяется некоторым кодом SQL, как показано ниже. В этом случае я хотел посмотреть, попадает ли «start_date» в указанную дату между сегодняшним днем и 30 днями назад, а «end_date» выпадает в пределах сегодняшнего дня и 30 дней спустя.
Если даты попадают в диапазоны, приведенный ниже код приводит к тому, что значение: live будет равно 0 или 1, в зависимости от того, попадает ли оно в пределы диапазонов дат (соответственно):
define index do<br/>
# fields:<br/>
...<br/>
# attributes:<br/>
has "CASE WHEN start_date > DATE_ADD(NOW(), INTERVAL -30 DAY) AND end_date < DATE_ADD(NOW(), INTERVAL 30 DAY) THEN 1 ELSE 0 END", :type => :integer, :as => :live<br/>
...<br/>
# delta:<br/>
...<br/>
end
Затем в вашем контроллере все, что вам нужно сделать, это проверить, если: live => 1, чтобы получить все записи, которые имеют start_dates и end_dates в диапазонах дат.
Я использовал sphinx_scope вот так:
sphinx_scope(:live) {<br>
{ :with => { :live => 1 } }<br>
}
и затем в моем контроллере:
@models = Model.live.search(...)
Чтобы убедиться, что он работает хорошо, вам, конечно, нужно реализовать частую переиндексацию, чтобы убедиться, что индекс обновлен, то есть правильные записи: live => 1 или 0!
Во всяком случае, сейчас, наверное, немного поздно, но я реализовал это, и это работает как шарм !!!