1

我正在使用 Rails 3.2 和 Thinking Sphinx 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

1 回答 1

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字段冲突(否则,Sphinx 会感到困惑)。

标准搜索将返回与国家名称或任何相关商店名称匹配的任何国家:

Country.search 'Australia'

但是,如果您只是在寻找与查询词与任何商店名称相匹配的国家/地区,则可以更具体一些:

Country.search :conditions => {:shop_names => 'Australia'}
于 2013-05-27T01:51:33.643 回答