按日期范围过滤Sphinx搜索结果

Gwy*_*fey 3 search sphinx ruby-on-rails thinking-sphinx

我有Widget.title,Widget.publish_ at和Widget.unpublish_ at.这是一个使用thinking_sphinx运行的rails应用程序,每晚索引一次.我想找到标题中包含'foo'的所有小部件,并发布(发布_at <Time.now,取消发布_at> Time.now).

为了使分页正常工作,我真的想在sphinx查询中执行此操作.我有'has:publish_at,:unpublish_at'来获取属性,但是'Widget.search("foo @publish_ at>#{Time.now}"的语法是什么,匹配_mode =>:extended'?这是甚至可能?

Mic*_*ael 9

是的,很容易实现,只需确保覆盖索引中的时间:

class Widget < ActiveRecord::Base
  define_index do
    indexes title
    has publish_at
    has unpublish_at
    ...
  end
Run Code Online (Sandbox Code Playgroud)

为了完全基于日期拉动它,由于狮身人面像需要有界范围(x..y而不是x> = y),因此需要少量的技巧.使用最小/最大值是非常不优雅的,但我现在还没有意识到它的好方法.

min_time = Time.now.advance(:years => -10)
max_time = Time.now.advance(:years => 10)
title = "foo"

Widget.search title, :with => {:publish_at => min_time..Time.now, :unpublish_at => Time.now..max_time}
Run Code Online (Sandbox Code Playgroud)