5

Ich habe Sphinx und Thinking-Sphinx vor ein paar Tagen auf meinem Rubin auf Schienen 2.3.2 installiert, und grundlegende Suche funktioniert großartig. Dies bedeutet, ohne Bedingungen. Jetzt möchte ich die Suche mit einigen Bedingungen filtern.Sphinx - Wann 'has' und 'indexes' für Felder zu verwenden ist

Ich habe die Ankündigung Modell, und der Index sieht wie folgt aus:

define_index do 
    indexes title, :as => :title, :sortable => true 
    indexes description, :as => :description, :sortable => true 
    end 

Vielleicht bin ich falsch, aber ich merkte, dass nur dann, wenn ich die :sortable => true Syntax dieser Attribute hinzugefügt, ich könnte sie als Bedingungen bei meiner Suche. Sonst wird es nichts finden.

Jetzt benutze ich auch acts_as_taggable_on Plugin, das meine zwei db-Tabellen generiert: Tags und Tags. Ich habe kein Modell für Tags, ich habe nur acts_as_taggable_on :tags, :categories bei meinem Ankündigungsmodell.

Was ich jetzt tun möchte, ist nach Tags zu filtern. Also habe ich versucht, zu meinem Index has tags(:id), :as => :tag_ids ohne Glück hinzuzufügen, und auch indexes tags(:id), :as => :tag_ids, aber es hat auch nicht funktioniert.

Wie kann ich bauen die Indizes so dass ich etwas tun kann:

Announcement.search 'some word', :conditions => {:tag_ids => some_id} 

Und auch, was der Unterschied zwischen has und indexes

Dank ist, Brian

Antwort

10

Let me beantworte deine Fragen umgekehrt. indexes whatever erwartet eine Zeichenkette, das ist was Sphinx nach dem von Ihnen bereitgestellten Text sucht.

Auf der anderen Seite fügt has whatever diesen Inhalt nicht zu den durchsuchbaren Feldern hinzu. Es erwartet in erster Linie Zahlen, weil Sie dieses Zeug zum Sortieren und Filtern verwenden, nachdem sphinx die Suche bereits durchgeführt hat.

Schließlich glaube ich, Sie wollen has tags(:id), :as => :tag_ids in Ihrem Modell und :with => {:tag_ids => some_id} in Ihrer Suche anstelle von :conditions. Für Textfelder, die Sie indiziert haben, werden Bedingungen verwendet, um Textsuchen in bestimmten Feldern anstelle von allen indizierten Feldern durchzuführen. With wird verwendet, um Ergebnisse mit den Attributen zu filtern, die Sie mit has whatever angegeben haben.

+0

Vielen Dank! Ich werde es versuchen. –

+0

Ich weiß nicht warum, aber es funktioniert nicht. Wie ich schon sagte, ich habe kein Tag-Modell, ich benutze nur das acts_as_taggable_on-Plugin. Ist es möglich, dass das Problem das Problem verursacht? –

+0

Ich meine, ich habe kein Feld "Tags" in der Ankündigungs-Tabelle. Das Plugin erzeugt zwei Tabellen: Tags und Tags. Also, die Beziehung zwischen den Ankündigungen und Tags ist durch Tagging-Tabelle. Hat es etwas damit zu tun? –