ThinkinSphinx查询不使用sphinx_选择,有四个条件

ThinkinSphinx查询不使用sphinx_选择,有四个条件,sphinx,thinking-sphinx,Sphinx,Thinking Sphinx,我尝试使用ThinkingSphinx返回开始日期在某个范围内或结束日期在同一范围内的记录,基本上是在该范围内开始或结束的任何记录 为此,我将使用计算属性和sphinx_select,并结合日期范围的建议,如下所示(假设有两条记录,记录a从范围外开始,但在范围内结束,记录b从范围内开始和结束): with_display=“*,IF(start_at>=#{range_start.to_i},1,0)+”+ “如果(起始点=#{range_start.to_i},10,0)+”+ “如果(end

我尝试使用ThinkingSphinx返回开始日期在某个范围内或结束日期在同一范围内的记录,基本上是在该范围内开始或结束的任何记录

为此,我将使用计算属性和sphinx_select,并结合日期范围的建议,如下所示(假设有两条记录,记录a从范围外开始,但在范围内结束,记录b从范围内开始和结束):

with_display=“*,IF(start_at>=#{range_start.to_i},1,0)+”+
“如果(起始点=#{range_start.to_i},10,0)+”+
“如果(end_at=#{range_start.to_i},1,0)+”+
“如果(起始点=#{range_start.to_i},10,0)+”+

“如果(end_at我刚刚意识到我的数学是错误的,考虑到我想处理的案例:

  • 记录a的
    显示值为21
  • 记录b的
    显示为22
我需要做的是将阵列更改为:

{
  sphinx_select: with_display,
  with: {'display' =>  [12, 21, 22]},
} 
为了处理在范围(21)内结束的记录、在范围(12)内开始的记录以及在范围(22)内开始和结束以外的记录的情况

with_display = "*, IF(start_at >= #{range_start.to_i}, 1, 0) + " + 
                  "IF(start_at <= #{range_end.to_i}, 1, 0)  AS display" 
=> [record_b]

with_display = "*, IF(end_at >= #{range_start.to_i}, 10, 0) + " + 
                  "IF(end_at <= #{range_end.to_i}, 10, 0) AS display"
=> [record_a, record_b]
{
  sphinx_select: with_display,
  with: {'display' =>  [12, 21, 22]},
}