Порядок Сфинкса: последние значения ноль / NULL
-
06-07-2019 - |
Вопрос
В проекте Rails я использую Sphinx вместе с плагином Thinking Sphinx. Я индексирую таблицу с атрибутом: foo, который является float. Р>
Мое желаемое поведение при сортировке по столбцу: foo будет означать, что значения nil всегда появляются в конце списка, например.
id; foo (order foo desc)
-------
1; 5
2; 3
3; -4
4: -5
5: nil
6: nil
id; foo (order foo asc)
-------
4: -5
3; -4
2; 3
1; 5
5: nil
6: nil
Если бы это был обычный sql, я бы отсортировал:
:order => "(foo IS NULL) ASC, foo DESC"
Но, похоже, это невозможно, так как я думаю, что значения NULL переводятся в 0 (это правда?). Использование упорядочивающих выражений sphinx, похоже, неправильно сортирует мои плавающие элементы. Р>
Кто-нибудь решил эту проблему или есть идеи, как это сделать?
Решение
Предлагаемое вами решение - это то, что я бы посоветовал - да, вы правы, Sphinx рассматривает NULL как 0.
Другие советы
Тем временем я пришел к решению, которое заключается в индексации дополнительного атрибута, например так:
define_index do
indexes foo, :sortable => true
has "foo IS NULL", :as => :foo_nil, :sortable => true
end
что позволяет мне заказывать вот так
:order => "foo_nil ASC, foo DESC"
Это немного неуклюже, тем более, что у меня есть много атрибутов, которые я хочу заказать следующим образом.