2009-05-18 6 views
1

J'utilise le sphinx de pensée pour la recherche sur une application de rails. J'ai un champ flottant appelé «hauteur». Je dois pouvoir rechercher ce champ pour des valeurs exactes (c'est-à-dire exactement 6,0, pas 6,5). Je dois aussi pouvoir trier sur le terrain.Recherche et tri par un champ flottant avec sphinx de la pensée

Ce que j'ai jusqu'à présent:

indexes height, :sortable => true 

Problème: ne trie pas correctement, retourne 6.0 et 6.5 si je recherche pour « 6 »

Répondre

3

Si vous avez affaire à des valeurs flottantes, il est préférable de les avoir comme un attribut au lieu d'un champ:

define_index do 
    # ... other fields 

    has height 
end 

les attributs sont triables par défaut (en effet, si vous ajoutez: sortable à un champ, tout ce qu'il fait est crea ting un attribut sous le capot de Thinking Sphinx), ainsi ceci devrait te permettre de trier.

Bien sûr, cela ne vous permet pas de recherche pour la hauteur, cependant, de sorte que vous aurez besoin d'un terrain ainsi:

define_index do 
    # ... other fields 
    indexes height, :as => :height_field 

    has height 
end 

J'ai donné le champ un alias, parce que vous ne pouvez pas avoir des champs et des attributs nommés la même chose. Compte tenu de tout cela, vous recherchez sur un flotteur, et à Sphinx, tous les champs sont des chaînes. Il lit 6.5 comme deux mots - 6 et 5, séparés par un point/période. Donc, je ne m'attendrais pas à ce que ce côté des choses fonctionne avec élégance, malheureusement.

Questions connexes