2

Rails プロジェクトでは、Thinking Sphinx プラグインと一緒に Sphinx を使用しています。float である属性 :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 順序付け式を使用すると、float が適切に並べ替えられないようです。

誰かがこの問題を解決しましたか、それを行う方法についてアイデアを持っていますか?

4

2 に答える 2

4

あなたが提供した解決策は、私が提案するものです-はい、あなたは正しいです.SphinxはNULLを0として扱います.

于 2009-06-21T22:50:53.570 に答える
2

その間に私が思いついた解決策の 1 つは、次のように追加の属性をインデックス化することです。

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 に答える