Ruby on rails Ruby on Rails中带有太阳黑子的日期范围刻面

Ruby on rails Ruby on Rails中带有太阳黑子的日期范围刻面,ruby-on-rails,ruby,ruby-on-rails-3,sunspot,faceted-search,Ruby On Rails,Ruby,Ruby On Rails 3,Sunspot,Faceted Search,我正在使用Sunspot在rubyonrails3应用程序中搜索事件(派对、音乐会等) 我已经成功地在两种不同的类别类型上设置了自由文本搜索和方面搜索 现在,我必须完成我的下一项任务我想设置与事件发生时间相关的方面 我想用方面来描述相对日期/时间范围,如“今天”、“本周末”、“下周末”和绝对日期/时间范围,如“2011年复活节”、“2012年元旦”。。。日期时间范围有时相互重叠 我在Stackoverflow浏览了Sunspot API文档,Sunspot wiki,阅读了大量的文章和博客。人们

我正在使用Sunspotrubyonrails3应用程序中搜索事件(派对、音乐会等)

我已经成功地在两种不同的类别类型上设置了自由文本搜索和方面搜索

现在,我必须完成我的下一项任务我想设置与事件发生时间相关的方面

我想用方面来描述相对日期/时间范围,如“今天”、“本周末”、“下周末”和绝对日期/时间范围,如“2011年复活节”、“2012年元旦”。。。日期时间范围有时相互重叠

我在Stackoverflow浏览了Sunspot API文档,Sunspot wiki,阅读了大量的文章和博客。人们在写它是可能实现的,但我没有发现任何例子或实现想法,使我了解如何做到这一点

有什么建议吗?

因为我的问题不在代码中,所以我不发布任何代码。类事件有一个名为“start\u time”的DateTime实例。我知道我的工作是定义日历中出现的绝对日期/时间范围

致以最良好的祝愿

/斯特凡


我告诉过你我是新手吗?;-)DS

您应该将字段设置为trie时间字段,以便进行有效的范围查询:

class Event
  searchable do
    time :start_time, :trie => true
  end
end
然后,您可以使用查询facet根据范围创建facet:

Event.search do
  facet :start_time do
    bod = Time.zone.now.beginning_of_day
    row :today do
      with :start_time, bod..(bod + 1)
    end
    row :tomorrow do
      with :start_time, (bod + 1)..(bod + 2)
    end
    # etc.
  end
end
这里的关键洞察是,您可以使用任意作用域构造facet。请注意,facet名称
:start_time
仅用于在搜索结果中引用facet,行标签
:today
:today
类似地仅用于客户端,以标识与这些查询相对应的行计数;从Solr的角度来看,它们没有任何意义,所以您可以随意调用它们(使用您想要的任何数据类型——它们不必是符号)


有关查询方面的更多信息,请参见此处:

您可以通过以下方式执行:

with(:registration_date).between(params[:start_date].to_date..params[:end_date].to_date)

看这里:

谢谢。看起来正是我需要的。谢谢!对我也很有用:)应该是+时间,即(bod+1)而不是(bod+1.天)吗?否则就太完美了