2013-05-26 4 views
1

Я использую Rails 3.2 и мышление Sphinx 3. У меня есть следующие связанные модели:Thinking Sphinx индексации вложенных моделей

# country.rb 
class Country < ActiveRecord::Base 
    has_many :states 
end 

# state.rb 
class State < ActiveRecord::Base 
    belongs_to :country 
    has_many :state_shops 
    has_many :shops, :through => :state_shops 
end 

# state_shop.rb 
class StateShop < ActiveRecord::Base 
    belongs_to :state 
    belongs_to :shop 
end 

# shop.rb 
class Shop < ActiveRecord::Base  
end 

В country.rb, я хочу найти имя shop. Вот мой индекс country:

# country_index.rb 
ThinkingSphinx::Index.define :country, :with => :active_record do 
    indexes :name 

    has budget, duration, overall_rating, created_at 
end 

Как должен мой соответствующий индекс в порядке поиска в shop.name?

ответ

4

Вы можете тянуть в ассоциации столбцов в определениях индекса довольно легко - вот пример для получения названия магазина в индекс страны:

ThinkingSphinx::Index.define :country, :with => :active_record do 
    indexes name 
    indexes states.state_shops.shop.name, :as => :shop_names 

    has budget, duration, overall_rating, created_at 
end 

Я дал поле псевдоним, так что Безразлично» t конфликтует с существующим полем name (Sphinx запутается в противном случае).

стандартный поиск будет возвращать любые страны, которые соответствуют названию страны или каким-либо из соответствующих магазинов имен:

Country.search 'Australia' 

Но вы можете быть немного более конкретным, если вы просто ищете для стран, которые соответствуют запрос на любой из названий магазинов:

Country.search :conditions => {:shop_names => 'Australia'} 
+0

Извините, я далеко от своего личного ноутбука, поэтому я не могу проверить это. Если несколько запросов в одной стране соответствуют запросу, как мне его группировать? Большое спасибо, Pat. – Victor

+0

Если несколько магазинов совпадают, вы все равно собираетесь вернуть эту страну один раз, а не много раз. Вы ищете страны, и Sphinx не повторяет результаты в рамках определенного поиска. – pat

+0

Миллион спасибо! – Victor