2013-05-26 83 views
1

我用Rails 3.2和思考獅身人面像3.我有以下的關聯模型:思考獅身人面像索引嵌套模型

# 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 

我已經給該領域的別名,所以它不」不會與現有的name字段衝突(否則獅身人面像會混淆)。

標準搜索將返回匹配的國名或任何相關的店鋪名稱,任何國家:

Country.search 'Australia' 

但你可以更具體一點,如果你只是在尋找國家匹配那查詢字詞只是任何一個店名:

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

對不起,我離我的個人筆記本電腦,所以我無法測試這個。如果一個國家的幾家商店與查詢相匹配,我應該如何對它進行分組?非常感謝,帕特。 – Victor

+0

如果有幾家商店相匹配,你仍然會讓這個國家返回一次,而不是很多次。您正在尋找國家,並且Sphinx不會在給定搜索內重複搜索結果。 – pat

+0

萬分感謝! – Victor

相關問題