2010-03-26 5 views
8

Non ho ancora implementato una funzione di ricerca e mi sento un po 'bloccato. Ho una funzione di ricerca di Sunspot che trova risultati basati su parole chiave - questo funziona alla grande - ma ora voglio implementare la funzione di sfaccettatura multipla, ma non riesco nemmeno a capire come impostare una ricerca di faccie di base.Come posso impostare una ricerca di facet con una relazione molti a molti usando Sunspot?

Ho una relazione molti a molti (in binari non nella vita reale):

Classe Persone has_many: competenze,: attraverso => ​​l'esperienza (e viceversa, ecc)

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

    searchable do 
    text :first_name, :surname 
    end 
end 

Nel controller

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

Questo è l'esempio di base non riesco a lavorare. Esso genera questo errore:

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

Come faccio a creare il link per: skill_ids

penso Devo mancare qualche riferimento nel modello - ma nessun esempio posso trovare fare riferimento alla Ids di un rapporto. La maggior parte degli esempi che ho trovato utilizza colonne già presenti in quel modello quando si utilizza la funzionalità di sfaccettatura.

  • Come posso eseguire l'implementazione di base?
  • Come utilizzerei questo nella vista? Devo chiamare hits.facet e scorrere le abilità? Come apparirebbe il codice per visualizzarlo?
  • Come seleziono più faccette da cercare?
  • Devo inserire questo nella wiki della comunità?

Grazie per il vostro tempo!

risposta

13

Tutto ciò che si desidera filtrare, sfaccettare o ordinare, Sunspot deve essere informato. Quindi nel tuo modello:

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

La tua chiamata #search nel controller sembra corretta. Secondo lei, devi fare qualcosa in questo senso:

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

row.instance restituirà l'istanza di abilità che il valore della fila si riferisce a (che è quello che l'opzione :references sta facendo nella definizione searchable).

io non sono sicuro di cosa si intende per "selezionare più sfaccettature per la ricerca da" - si può generare molteplici sfaccettature (che danno agli utenti scelte per un ulteriore affinamento ricerca) chiamando i facet metodo più volte in una ricerca ; e puoi quindi utilizzare le loro scelte di sfaccettature con le limitazioni di ambito utilizzando il metodo with, che puoi anche chiamare tutte le volte che vuoi.

Parlando di wiki, la maggior parte di queste informazioni sono disponibili (con maggiori spiegazioni) nel wiki macchie solari:

+1

Grazie! Non sono riuscito a trovare un riferimento a: più parti nella wiki o altrove - devono aver usato i termini di ricerca sbagliati o qualcosa del genere. Hai avuto la giusta idea di cosa intendessi per "selezionare più faccette da cercare" - in altre parole: filtrare per più selezioni. La wiki ora ha senso per me con una demo funzionante da testare! Proverò ad aggiungere nella funzionalità di filtro successiva: avrei ragione a pensare che posso creare un link_to e passare i parametri per ulteriori sfaccettature, o che è un modo lungo per aggirare? Grazie ancora! –