Have almost the same problem, in my case start_date and end_date wasn't really a date, just a year (integer), solve it with multiple value fields as range:
searchable do
date :course_date, multiple: true do
plannings.map{|p| (p.start_date..p.end_date).to_a}
end
...
end
so course_date contain all years when courses going. If you have 2001-2003 and 2005-2007(2001, 2002, 2003, 2005, 2006, 2007) and search with equal_to.