Commande Sphinx: les valeurs nil / NULL en dernier
-
06-07-2019 - |
Question
Sur un projet Rails, j'utilise Sphinx avec le plug-in Thinking Sphinx. J'indexe une table avec un attribut: foo qui est un float.
Mon comportement souhaité lors du tri de colonne: foo serait que des valeurs nulles apparaissent toujours à la fin de la liste, par exemple.
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
S'il s'agissait d'un SQL normal, je trierais comme suit:
:order => "(foo IS NULL) ASC, foo DESC"
Mais cela ne semble pas possible, car je pense que les valeurs NULL sont traduites en 0 (est-ce vrai?). L'utilisation d'expressions de commande de sphinx ne semble pas trier correctement mes flotteurs.
Quelqu'un at-il résolu ce problème ou a-t-il une idée de la façon de le résoudre?
La solution
La solution que vous avez fournie correspond à ce que je suggérerais - puisque oui, vous avez raison, Sphinx traite les valeurs NULL comme des 0.
Autres conseils
Une solution que j'ai trouvée entre-temps consiste à indexer un attribut supplémentaire, comme ceci:
define_index do
indexes foo, :sortable => true
has "foo IS NULL", :as => :foo_nil, :sortable => true
end
ce qui me permet de commander comme ceci
:order => "foo_nil ASC, foo DESC"
C'est un peu maladroit, d'autant plus que j'ai beaucoup d'attributs que je veux avoir commandés comme ça.