Sphinx - Wann verwendet man ‚hat‘ und ‚Indizes‘ für Felder
-
21-09-2019 - |
Frage
Ich installierte Sphinx und Denken-Sphinx vor einigen Tagen auf meine Ruby on Rails 2.3.2 und grundlegende Suche funktioniert super. Dieses Mittel ohne jegliche Bedingungen. Nun, ich möchte die Suche mit einigen Bedingungen filtern.
Ich habe das Announcement 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 bemerkte, dass nur dann, wenn ich die :sortable => true
Syntax dieser Attribute hinzugefügt, ich sie als Bedingungen in meiner Suche benutzen konnte. Sonst wird es nichts finden.
Nun, ich bin auch mit acts_as_taggable_on Plugin, das meinen zwei DB-Tabellen erstellt: Tags und Markierungen. Ich habe kein Modell für die Tags habe, ich habe nur acts_as_taggable_on :tags, :categories
an meiner Ankündigung Modell.
Was möchte ich jetzt tun ist, um Filter von Tags. Also habe ich versucht, ohne Glück zu meinem Index has tags(:id), :as => :tag_ids
hinzufügen und auch indexes tags(:id), :as => :tag_ids
aber es hat nicht funktioniert.
Wie kann ich die Indizes bauen, damit ich etwas tun kann:
Announcement.search 'some word', :conditions => {:tag_ids => some_id}
Und auch, was ist der Unterschied zwischen has
und indexes
Danke, Brian
Lösung
Lassen Sie mich Ihre Fragen in umgekehrter Reihenfolge beantworten. indexes whatever
erwartet einen String, das ist, was Sphinx für den Text suchen Sie.
Auf der anderen Seite, hat has whatever
uns diese Inhalte nicht zu den durchsuchbaren Felder hinzufügen. Er erwartet, dass in erster Linie Zahlen, weil Sie diese Dinge verwenden für die Sortierung und Filterung nach Sphinx bereits die Suche gemacht hat.
Schließlich glaube ich, Sie has tags(:id), :as => :tag_ids
in Ihrem Modell mögen, und :with => {:tag_ids => some_id}
bei Ihrer Suche statt :conditions
zu verwenden. Die Bedingungen werden auf Textfelder verwendet, dass Sie indiziert haben, als eine Möglichkeit, Textsuchen auf bestimmten Bereichen statt alle indizierten Felder auszuführen. Mit zu Filterergebnisse verwendet wird, unter Verwendung der Attribute, die Sie mit has whatever
angegeben haben.