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