3

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

为了让分页正常工作,我真的想在狮身人面像查询中做到这一点。我有 'has :publish_at, :unpublish_at' 来获取属性,但是 'Widget.search("foo @publish_ at > #{Time.now}",:match _mode=>:extended' 的语法是什么?这是甚至可能?

4

2 回答 2

9

是的,很容易,只要确保你在索引中覆盖了时间:

class Widget < ActiveRecord::Base
  define_index do
    indexes title
    has publish_at
    has unpublish_at
    ...
  end

为了完全基于日期来拉它,由于 sphinx 需要有界的范围(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}
于 2008-12-10T13:25:19.220 回答
1

我还没有使用带有导轨的狮身人面像。但这可以通过 Sphinx API 实现。你需要做的是在你的 sphinx.conf 中设置一个 datetime 属性。并且不要忘记在您的索引选择中使用 UNIX_TIMESTAMP(publish_at)、UNIX_TIMESTAMP(unpublish_at)。

于 2009-03-13T13:30:36.490 回答