我试图返回start_date
或 end_date
落在日期范围内的结果。我在我的TS查询中使用with_all
,如下所示:
range = (start_date..end_date)
with_all = { start_date: [range], end_date: [range] }
但是,这不起作用,因为我认为这需要 start_date
和end_date
落在范围内。
我需要做什么才能在 start_date
或end_date
落在范围内时返回结果?
答案 0 :(得分:0)
经过多次非摇滚相关的敲击后,我找到了一个有效的解决方案。
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]})