我有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'?这是甚至可能?
答案 0 :(得分:9)
是的,很容易实现,只需确保覆盖索引中的时间:
class Widget < ActiveRecord::Base
define_index do
indexes title
has publish_at
has unpublish_at
...
end
为了完全基于日期拉动它,由于狮身人面像需要有界范围(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}
答案 1 :(得分:1)
我还没有使用sphinx和rails。 但这可以通过Sphinx API实现。 您需要做的是在sphinx.conf中设置datetime属性。 并且不要忘记在索引选择中使用UNIX_TIMESTAMP(publish_at),UNIX_TIMESTAMP(unpublish_at)。