2013-02-12 3 views
1

Вот моя проблема, я постараюсь быть кратким.Sunspot - Поиск в нескольких диапазонах дат

У меня есть модель Course что has_manyPlanning. A Planning имеет start_date и end_date.

Я хочу получить (с пятном) все Courses, которые имеют конкретное планирование между данным start_date и end_date.

Проблема заключается в том, что если я храню в модели Course:

searchable do 
    date :start_date, multiple: true do 
    plannings.map(&:start_date) 
    end 

    date :end_date, multiple: true do 
    plannings.map(&:end_date) 
    end 
    ... 
end 

я освобождаю тот факт, что start_date и end_date являются пары.

Есть ли способ/трюк для хранения диапазонов?

ответ

1

имеют почти такая же проблема, в моем случае start_date и end_date не были действительно датой, всего за год (целое число), разрешили ее с несколькими полями значений как диапазон:

searchable do 
    date :course_date, multiple: true do 
    plannings.map{|p| (p.start_date..p.end_date).to_a} 
    end 
    ... 
end 

so course_date содержит все годы, когда ходят курсы. Если у вас 2001-2003 и 2005-2007 гг. (2001, 2002, 2003, 2005, 2006, 2007) и поиск с равным_to.

0

Возможность сделать ваш запрос в два раза. Сначала найдите плакаты, затем найдите курсы, ограничивающие курсы по ID.

Может быть, не очень оптимизирован один, но зачем пытаться оптимизировать в ближайшее время ...

Или индексных часов с функцией:

def happens_between_8_and_9 
    return true if start_date > 8.. 
end 

searchable do 
    boolean :happens_between_8_and_9 
    boolean :happens_between_9_and_10 
end 

`` `

+0

Я попробую! Я не могу сделать второе предложение, поскольку имею дело с датами, а не временем. Но интересный трюк! –