思考sphinx搜索中的条件“OR”,按日期范围过滤

时间:2011-07-19 08:30:47

标签: ruby-on-rails ruby-on-rails-3 sphinx thinking-sphinx

按日期范围连接条件OR与filterint有问题。 像这样的东西

#pseudo SQL syntax
(@date_start < params[:date_to_search] < @date_end) && (@every_day==1 || @day_of_week== params[:day])

-

class OfferTime < ActiveRecord::Base
  define_index do
    indexes every_day #boolean
    indexes day_of_week #string eg. Tue, Mon etc

    has date_start #Date NOT datetime
    has date_end #Date
  end
end

要制作条件OR我使用此解决方案: Conditional "or" in Thinking Sphinx search

这很有效。

(OfferTime.search "@every_day 1 | @day_of_week Tue", :match_mode => :extended).size 
# => 2
# Correct answer

但我不知道如何将其与该日期范围联系起来

(@date_start < params[:date_to_search] < @date_end)

示例:

(OfferTime.search "@every_day 1 | @day_of_week Tue & @date_start < #{1.year.ago}", :match_mode => :extended).size 
# => 1
# wrong answer! should be 0!

是否可以通过ThinkingSphinx实现这一目标?

1 个答案:

答案 0 :(得分:0)

不确定您所追求的逻辑 - 是every day OR (day of week and date start)还是(every day OR day of week) AND date start

后者是可能的 - 但是你想要使用:with arguments过滤属性 - 它应该是well-covered in the docs。要获得“不到1年前”的过滤器,您需要使用一个范围 - 从一年前到今天(或者如果更合适的话,将来还是未来)。

如果是前者,我不确定这是否可能 - 但如果是,则可能需要调查表达式语法和Sphinx的select子句。同样,在TS文档中covered a bit,链接到相关的Sphinx部分。