2012-03-22 14 views
7

rieles que tengo 3 aplicaciones con los modelos:¿Cómo usar los atributos de valor múltiple (MVA) y las facetas juntas en 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 

necesito para filtrar eventos por categorías y hacer árbol de categorías con recuentos:

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 
... 

ha intentado realizar la siguiente manera:

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 

Este código genera buenos resultados de búsqueda pero los recuentos de facetas son tristes:

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

En lugar de:

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

Y la parte más divertida empezó cuando decidí cambiar de índice, pero se olvidó de reconstruirlo:

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

Este es un truco sucio: Esfinge comienza a utilizar de edad consulta de índice con nueva lógica de modelo. Los recuentos y los resultados de búsqueda son geniales. Pero, por supuesto, si tratamos de reconstruir índices, implementar o hacer smth, entonces los conteos se romperán nuevamente.

La pregunta es: ¿cómo usar MVA con las facetas juntas?

preguntas resultados en '09, con el mismo problema: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2

Gracias.

Respuesta

2

Agregar : all_ints => true a la definición de ese atributo.

Tuve el mismo problema y lo solucioné. Por favor marque aquí:

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

podría ser útil para usted.

+1

Tenga en cuenta que [las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info) no se recomiendan, por lo que las respuestas deben ser el punto final de una búsqueda de una solución (frente a otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra

Cuestiones relacionadas