在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排序表达式似乎不能正确排序我的浮动。
有人解决了这个问题,或者对如何解决这个问题有所了解?
答案 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"
这有点笨拙,特别是因为我有许多我希望这样订购的属性。