太阳黑子 - 在多个日期范围内搜索

时间:2013-02-12 09:03:27

标签: ruby-on-rails solr model sunspot sunspot-rails

这是我的问题,我会尽量简明扼要。

我有Course has_many的模型PlanningPlanning有一个start_date和一个end_date

我想检索(使用太阳黑子)在给定Coursesstart_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_dateend_date是夫妻的事实。

是否存在存储范围的方式/技巧?

2 个答案:

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

所以course_date包含课程进行的所有年份。如果您有2001-2003和2005-2007(2001,2002,2003,2005,2006,2007)并使用equal_to进行搜索。

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

```