Вопрос

В проекте 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"

Это немного неуклюже, тем более, что у меня есть много атрибутов, которые я хочу заказать следующим образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top