2012-03-22 10 views
7

rotaie Ho 3 app con i modelli:Come utilizzare Attributi multivalore (MVA) e faccette insieme in Thinking Sphinx?

class Event < ActiveRecord::Base 
    has_many :event_categories 
    has_many :categories, through: :event_categories 
end 

class EventCategory < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :event 
end 

class Category < ActiveRecord::Base 
    belongs_to :parent, class_name: 'Category' 
    has_many :subcategories, class_name: 'Category', foreign_key: :parent_id 
end 

ho bisogno di filtrare gli eventi per categorie e rendere categoria albero con i conteggi:

Music Festivals (10) # id: 1 
-- Classic (2)  # id: 3 
-- Pop (8)   # id: 8 
IT Conferences (2) # id: 10 
-- Ruby (1)   # id: 11 
-- PHP (1)   # id: 12 
... 

ho cercato di fare in questo modo:

define_index do 
    has category_values, type: :multi, facet: true 
end 

before_save :collect_category_values 

def collect_category_values 
    # traversing events categories 
    # putting string like '10/1/3' to self.category_values 
    # which contains all event's categories and subcategories 
end 

Questo codice genera risultati di ricerca interessanti ma i conteggi di facet sono tristi:

{ :category_values => { '1/3' => 2, '10/11' => 1 } } 

Invece di:

{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 } 

E la parte più divertente è cominciato quando ho deciso di cambiare indice, ma ha dimenticato di ricostruirlo:

# old attribute --> has category_values, type: :multi, facet: true 
has categories(:id), as: :category_id, type: :multi facet: true 

Si tratta di un hack sporco: sfinge inizia ad utilizzare vecchi query di indice con nuova logica del modello. Conti e risultati di ricerca sono fantastici. Ma, naturalmente, se proveremo a ricostruire gli indici, distribuire o smth, i conteggi verranno interrotti di nuovo.

La domanda è: come utilizzare MVA con le faccette insieme?

domande trovato da '09, con lo stesso problema: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2

Grazie.

risposta

2

Aggiungi : all_ints => true a tale definizione di attributo.

Ho avuto lo stesso problema e l'ho risolto. Si prega di verificare qui:

https://github.com/pat/thinking-sphinx/issues/357

potrebbe essere utile a voi.

+1

Si noti che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, pertanto le risposte dovrebbero essere il punto finale di una ricerca di una soluzione (l'ennesima sosta di riferimenti, che tendono a scadere nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

Problemi correlati