Ruby on Rails中使用Sunspot的日期范围方面
我正在使用Sunspot在Ruby on Rails 3应用程序中搜索事件(派对,音乐会……)。
我已设法在几种不同的类别类型上设置自由文本搜索和方面搜索 。
现在,我陷入了下一个任务。 我想设置与事件发生时间相关的方面 。
我想要描述相对日期/时间范围的方面,例如“今天”,“本周末”,“下周末” 和绝对日期/时间范围 ,例如“2011年复活节假期”,“2012年新年”,。 ..日期时间范围有时相互重叠。
我浏览过Sunspot API文档,Sunspot wiki,这里是Stackoverflow,阅读和加载文章和博客。 人们写的是有可能实现但我没有找到让我理解如何做到这一点的例子或实现思路。
有什么建议?
由于我的问题不在我的代码中,因此我不会发布任何代码。 类Event有一个名为“start_time”的DateTime实例。 我明白我的工作是定义绝对日期/时间范围何时出现在日历中。
最好的祝福,
./stefan
PS我告诉我我是新手吗? 😉 DS
您应该将字段设置为trie时间字段以进行有效范围查询:
class Event searchable do time :start_time, :trie => true end end
然后,您可以根据范围使用查询构面进行构面:
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名称:start_time
仅用于引用搜索结果中的facet,而行标签:today
和:tomorrow
类似地仅在客户端用于标识与这些查询对应的行计数; 从Solr的角度来看,它们没有任何意义,因此您可以随意调用它们(使用您想要的任何数据类型 – 它们不必是符号)。
有关查询方面的更多信息,请访问: http : //sunspot.github.com/docs/Sunspot/DSL/FieldQuery.html#facet-instance_method
你可以这样做:
with(:registration_date).between(params[:start_date].to_date..params[:end_date].to_date)
看这里: http : //sunspot.github.io/docs/Sunspot.html#search-class_method