【问题标题】:Sphinx ordering: nil/NULL values lastSphinx 排序:最后是 nil/NULL 值
【发布时间】:2009-06-21 14:00:32
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢帕特。这帮助我找出了我正在处理的搜索问题。如果你想用一个 nil 值匹配一个属性,你必须在你的搜索条件中指定 0 而不是 nil。
    【解决方案2】:

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

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

    什么让我这样订购

    :order => "foo_nil ASC, foo DESC"
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多