Ruby on Rails中使用Sunspot的日期范围方面

时间:2011-02-24 10:03:03

标签: ruby-on-rails ruby ruby-on-rails-3 sunspot faceted-search

我正在使用太阳黑子来搜索 Ruby on Rails 3应用程序中的事件(派对,音乐会......)。

我设法在几种不同的类别类型上设置了自由文本搜索和方面搜索

现在,我陷入了下一个任务。 我想设置与事件发生时相关的方面。

我希望有方面描述相对日期/时间范围,例如“今天”,“本周末”,“下周末”和绝对日期/时间范围 ,例如“2011年复活节假期”,“2012年元旦”,......日期时间范围有时会相互重叠。

我浏览过Sunspot API文档,Sunspot wiki,这里是Stackoverflow,阅读和加载文章和博客。人们写的是有可能实现,但我找不到让我理解如何做到这一点的例子或实施想法。

有什么建议吗?

由于我的问题不在我的代码中,所以我不发布任何代码。类Event有一个名为“start_time”的DateTime实例。我明白我的工作是定义绝对日期/时间范围何时出现在日历中。

致以最诚挚的问候,

./的Stefan

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

2 个答案:

答案 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