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