2010-03-26 6 views
8

Ich habe noch keine Suchfunktion implementiert und fühle mich ein wenig festgefahren. Ich habe eine Sunspot-Suchfunktion, die Ergebnisse basierend auf Stichwörtern findet - das funktioniert großartig - aber ich möchte jetzt die Multi-Select-Facettenfunktion implementieren, aber ich kann nicht einmal herausfinden, wie man eine grundlegende Facettensuche einrichtet.Wie richte ich eine Facettensuche mit einer Viele-zu-Viele-Beziehung mit Sunspot ein?

Ich habe eine viele zu viele Beziehung (in Schienen nicht im wirklichen Leben):

Klasse Menschen has_many: Fähigkeiten,: durch => Erfahrung (und umgekehrt usw.)

Class People < ActiveRecord::Base 
    has_many :skills, :through => experience 

    searchable do 
    text :first_name, :surname 
    end 
end 

In der Controller

@search = Sunspot.search(People) 
    facet :skill_ids 
end 

Dies ist das grundlegende Beispiel, das ich nicht arbeiten kann. Es erzeugt diesen Fehler:

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids' 

Wie erstelle ich den Link zu: skill_ids

Ich glaube, ich muss in dem Modell einen Hinweis fehlt - aber keine Beispiele kann ich die Ids der Referenz finden Sie ein Verhältnis. Die meisten Beispiele, die ich gefunden habe, verwenden Spalten, die sich bereits in diesem Modell befinden, wenn die Facettenfunktionalität verwendet wird.

  • Wie kann ich die grundlegende Implementierung arbeiten?
  • Wie würde ich das in der Ansicht verwenden - muss ich hits.facet aufrufen und über die Fähigkeiten iterieren? Wie würde der Code aussehen, um dies anzuzeigen?
  • Wie würde ich mehrere Facetten auswählen, nach denen gesucht werden soll?
  • Soll ich das in das Community-Wiki einfügen?

Vielen Dank für Ihre Zeit!

Antwort

13

Alles, was Sie filtern, facettieren oder bestellen möchten, muss Sunspot wissen. Also in Ihrem Modell:

searchable do 
    text :first_name, :surname 
    integer :skill_ids, :multiple => true, :references => Skill 
end 

Ihre # Suche Anruf in Ihrem Controller sieht richtig aus.

- @search.facet(:skill_ids).rows.each do |row| 
    = row.instance.name 

row.instance kehrt die Instanz von Geschicklichkeits dass der Wert der Zeile bezieht sich auf (das ist, was die :references Option wird in der searchable Definition zu tun): Ihrer Ansicht nach würden Sie etwas in dieser Richtung tun.

Ich bin nicht sicher, was Sie unter „wählen Sie mehrere Facetten, die durch die Suche“ bedeuten - ein mehrere Facetten erzeugen können (die Benutzer geben Auswahl zur weiteren Verfeinerung Suche) durch die facet Methode mehrfach bei einer Suche Aufruf ; und Sie können dann ihre Facettenauswahl mit Bereichsbeschränkungen unter Verwendung der Methode with verwenden, die Sie auch so oft aufrufen können, wie Sie möchten.

von Wikis Sprechen, die meisten dieser Informationen zur Verfügung (mit mehr Erklärung) im Sunspot wiki:

+1

Thank you! Ich konnte keinen Verweis auf den: mehrteiligen Teil im Wiki oder anderswo finden - muss falsche Suchbegriffe verwendet haben oder so. Sie haben die richtige Vorstellung davon, was ich mit "Auswahl mehrerer Facetten zum Suchen nach" gemeint habe - anders ausgedrückt: Filtern nach mehreren Selektionen. Das Wiki macht jetzt Sinn mit einer funktionierenden Demo zum Testen! Ich werde versuchen, die Filterfunktionalität als nächstes hinzuzufügen: Würde ich Recht haben zu denken, dass ich einen link_to erstellen und Parameter für zusätzliche Facetten einreichen kann, oder ist das ein langer Weg? Danke nochmal! –

Verwandte Themen