5

Ho installato Sphinx e Thinking-Sfinge qualche giorno fa sul mio ruby ​​on rails 2.3.2, e la ricerca di base funziona alla grande. Questo significa, senza alcuna condizione. Ora, voglio filtrare la ricerca con alcune condizioni.Sfinge - Quando usare 'ha' e 'indici' per i campi

ho il modello di annuncio, e l'indice si presenta come segue:

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

Forse mi sbaglio, ma ho notato che solo quando ho aggiunto la sintassi :sortable => true a questi attributi, potrei usarli come condizioni nella mia ricerca. Altrimenti non troverà nulla.

Ora, sto anche utilizzando il plugin act_as_taggable_on, che ha generato le mie due tabelle db: tag e taggings. Non ho un modello per i tag, ho solo acts_as_taggable_on :tags, :categories nel mio modello di annunci.

Quello che mi piacerebbe fare ora è filtrare per tag. Così, ho provato ad aggiungere al mio indice has tags(:id), :as => :tag_ids senza fortuna, e anche a indexes tags(:id), :as => :tag_ids ma non ha funzionato neanche.

Come posso costruire gli indici in modo da poter fare qualcosa di simile:

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

E, inoltre, che è la differenza tra has e indexes

Grazie, Brian

risposta

10

Lasciami rispondi alle tue domande in senso inverso. indexes whatever si aspetta una stringa, questo è ciò che la sfinge cercherà il testo che fornisci.

D'altra parte, has whatever NON aggiunge questo contenuto ai campi ricercabili. Si aspetta principalmente numeri, perché usi questa roba per l'ordinamento e il filtraggio dopo che la sfinge ha già fatto la ricerca.

Infine, credo che si desidera has tags(:id), :as => :tag_ids nel modello e :with => {:tag_ids => some_id} nella ricerca anziché utilizzare :conditions. Le condizioni vengono utilizzate nei campi di testo che hai indicizzato, come modo per eseguire ricerche di testo su campi specifici invece di tutti i campi indicizzati. Con viene utilizzato per filtrare i risultati utilizzando gli attributi che hai specificato con has whatever.

+0

Grazie mille! Lo proverò. –

+0

Non so perché, ma non funziona. Come ho detto prima, non ho un modello Tag, uso solo il plug-in act_as_taggable_on. È possibile che il problema stia causando il problema? –

+0

Voglio dire, non ho un campo 'tag' nella tabella degli annunci. Il plugin genera due tabelle: tag e taggings. Quindi, la relazione tra annunci e tag è attraverso la tabella dei taggings. Ha qualcosa a che fare con questo? –

Problemi correlati