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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top