Sphinx排序:最后的nil / NULL值

时间:2009-06-21 14:00:32

标签: ruby-on-rails sphinx thinking-sphinx

在Rails项目中,我正在使用Sphinx和Thinking Sphinx插件。我用一个属性索引一个表:foo是一个浮点数。

排序列时我想要的行为: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 个答案:

答案 0 :(得分:4)

你提供的解决方案是我建议的 - 是的,你是对的,Sphinx将NULL视为0。

答案 1 :(得分:2)

我在此期间提出的一个解决方案是索引一个额外的属性,如下所示:

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

是什么让我这样订购

:order => "foo_nil ASC, foo DESC"

这有点笨拙,特别是因为我有许多我希望这样订购的属性。