ThinkingSphinx with_all 或查询

ThinkingSphinx with_all OR query

我正在尝试 return 结果 start_date end_date 在一个日期范围内。我在我的 TS 查询中使用 with_all,如下所示:

range = (start_date..end_date)
with_all = { start_date: [range], end_date: [range] }

但是,这不起作用,因为我相信这将需要 start_dateend_date 都在该范围内。

如果 start_dateend_date 在范围内,我需要做什么才能得到 return 结果?

经过多次与摇滚无关的头部撞击后,我找到了一个可行的解决方案。

srange  = date_range[:start].to_datetime.utc.beginning_of_day.to_i
erange  = date_range[:end].to_datetime.utc.end_of_day.to_i

# * full range falls within start_date & end_date
# * start_date & end_date is within the full range
# * end range is within start_date & end_date
# * start range is within start_date & end_date

sphinx_select = "
*, (IF(
#{srange} >= start_date AND
#{srange} <= end_date AND
#{erange} >= start_date AND
#{erange} <= end_date, 1, 0) +

IF(
start_date >= #{srange} AND
start_date <= #{erange} AND
end_date   >= #{srange} AND
end_date   <= #{erange}, 1, 0) +

IF(
#{srange} <= start_date AND
#{srange} <= end_date AND
#{erange} >= start_date AND
#{erange} <= end_date, 1, 0) +

IF(
#{srange} >= start_date AND
#{srange} <= end_date AND
#{erange} >= start_date AND
#{erange} >= end_date, 1, 0)) as in_date_range"

MyModel.search('',
               select: select,
               where: {"in_date_range" => [1,2,3,4]})