0

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

为此,我根据文档使用计算属性和 sphinx_select结合本文对日期范围的建议,如下所示(假设有两条记录,record_a 在范围之外开始,但在范围内结束,并且 record_b 开始并在范围内结束):

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

但是,如果我只使用 start_at 条件,我会得到一条记录,如果我只使用 end_at 条件,它会返回两条记录。

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]

如果我正确理解这一点,拥有所有四个条件,应该会返回 record_a 和 record_b,因为 record_a 的display值应该是 20,而 record_b 的值应该display是 22。

我错过了什么吗?

4

1 回答 1

0

考虑到我要处理的情况,我刚刚意识到我的数学是错误的:

  • record_a 将有display21
  • record_b 将有display22

我需要做的是将我的数组更改为:

{
  sphinx_select: with_display,
  with: {'display' =>  [12, 21, 22]},
} 

依次处理在范围内结束的记录 (21)、在范围内开始的记录 (12) 以及开始结束在范围内的记录 (22)

于 2012-12-21T05:43:39.703 回答