我正在尝试使用 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。
我错过了什么吗?