ja mam szyny 3 app z modelami:Jak używać atrybutów wielowartościowych (MVA) i aspektów razem w Myślącym Sfinksie?
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
muszę filtrować zdarzenia według kategorii i renderowanie drzewa kategorii z powodów:
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
...
Próbowałem zrobić tak:
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
Ten kod generuje fajne wyniki wyszukiwania, ale liczba aspektów jest smutna:
{ :category_values => { '1/3' => 2, '10/11' => 1 } }
Zamiast:
{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 }
a najzabawniejszych części zaczęło, kiedy zdecydowaliśmy się na zmianę indeksu, ale zapomniał odbudować go:
# old attribute --> has category_values, type: :multi, facet: true
has categories(:id), as: :category_id, type: :multi facet: true
To jest brudny Hack: sfinks zacznie używać starych zapytanie indeksowe z nową logiką modelu. Liczenia i wyniki wyszukiwania są świetne. Ale, oczywiście, jeśli spróbujemy odbudować indeksy, wdrożyć lub coś, wtedy liczy się ponownie.
Pytanie brzmi: jak używać MVA z fasetkami razem?
Znaleziono pytania z '09, z tym samym problemem: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2
Dziękuję.
Należy zauważyć, że [Link tylko odpowiedzi] (http://meta.stackoverflow.com/tags/link-only-answers/info) zniechęca SO odpowiedzi powinno być końcowy punkt wyszukiwania do roztworu (vs. kolejny przystanek odniesień, które z czasem stają się nieaktualne). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra