2009-05-18 10 views
1

Ich benutze denken Sphinx für die Suche auf einer Schiene App. Ich habe ein Float-Feld namens 'Höhe'. Ich muss in der Lage sein, dieses Feld nach genauen Werten zu durchsuchen (d. H. Genau 6,0, nicht 6,5). Ich muss auch in der Lage sein, auf dem Feld zu sortieren.Suche und Sortierung nach einem Float-Feld mit Denken Sphinx

Was ich habe, so weit:

indexes height, :sortable => true 

Problem: nicht richtig sortieren, kehrt 6.0 und 6.5, wenn ich für '6' suchen

Antwort

3

Wenn Sie mit Float-Werten zu tun hat, es ist am besten, sie als Attribut haben anstelle eines Feldes:

define_index do 
    # ... other fields 

    has height 
end 

Attribute sind sortierbar standardmäßig (in der Tat, wenn Sie hinzufügen: sortierbar zu einem Feld, alles was man tut, ist crea ein Attribut unter der Haube von Thinking Sphinx), so sollte dies Ihnen erlauben, zu sortieren.

Natürlich bedeutet dies ermöglicht es Ihnen nicht zu Suche für die Höhe, obwohl, so dass Sie auch ein Feld benötigen:

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

    has height 
end 

ich das Feld ein Alias ​​gegeben haben, weil Sie können Felder und Attribute nicht gleich benennen.

Angesichts all das, Sie suchen auf einem Float, und Sphinx, alle Felder sind Strings. Es liest 6,5 als zwei Wörter - 6 und 5, getrennt durch einen Punkt/Zeitraum. Ich würde also nicht erwarten, dass diese Seite der Dinge leider elegant verläuft.

Verwandte Themen