Порядок Сфинкса: последние значения ноль / NULL - PullRequest
2 голосов
/ 21 июня 2009

В проекте 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, похоже, неправильно сортирует мои плавающие элементы.

Кто-нибудь решил эту проблему или есть идеи, как это сделать?

Ответы [ 2 ]

4 голосов
/ 22 июня 2009

Решение, которое вы предоставили, - это то, что я бы посоветовал: да, вы правы, Sphinx рассматривает NULL как 0.

2 голосов
/ 21 июня 2009

Одно решение, которое я придумала тем временем, - это индексировать дополнительный атрибут, например:

define_index do 
  indexes foo, :sortable => true
  has "foo IS NULL", :as => :foo_nil, :sortable => true
end

что позволяет мне заказывать вот так

:order => "foo_nil ASC, foo DESC"

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

...