2

在 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 排序表达式似乎无法正确排序我的浮点数。

有没有人解决了这个问题或知道如何解决这个问题?

4

2 回答 2

4

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

于 2009-06-21T22:50:53.570 回答
2

同时我想出的一个解决方案是索引一个额外的属性,如下所示:

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

是什么让我这样订购

:order => "foo_nil ASC, foo DESC"

这有点笨拙,特别是因为我有很多我想像这样订购的属性。

于 2009-06-21T14:24:58.340 回答