Запрос ThinkinSphinx не работает с sphinx_select с четырьмя условиями
Я пытаюсь использовать ThinkingSphinx для возврата записей, у которых есть начальная дата в пределах диапазона ИЛИ конечная дата в том же диапазоне, в основном любая запись, которая начинается или заканчивается в этом диапазоне.
Чтобы сделать это, я использую вычисляемый атрибут и sphinx_select в соответствии с документацией в сочетании с тем, что этот пост предлагает для диапазонов дат, следующим образом (предположим, что есть две записи, запись_а начинается за пределами диапазона, но заканчивается в пределах диапазона и начинается запись_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.
Я что-то пропустил?
1 ответ
Я просто понял, что моя математика была неправильной, учитывая случаи, которые я хочу обработать:
- record_a будет иметь
display
из 21 - record_b будет иметь
display
из 22
Что мне нужно было сделать, это изменить мой массив на:
{
sphinx_select: with_display,
with: {'display' => [12, 21, 22]},
}
чтобы обрабатывать случаи записей, которые заканчиваются в диапазоне (21), записи, которые начинаются в диапазоне (12), и записи, которые начинаются и заканчиваются в диапазоне (22)