Я не пробовал это на has_many: так что пристрелите меня в огне, если у вас есть, но я не понимаю, почему это не сработает и для вас (я использую это для ассоциации has_many Вы в основном используете свою ассоциацию в определении индекса. Затем поиск по этой модели также будет искать дочерние записи.
class Product < ActiveRecord::Base
has_many :product_categories
define_index do
indexes a_product_field_to_index
indexes product_categories.name, :as => :categories
end
end
В контроллере:
@products = Product.search(params[:query] || '')
#params[:query] is simply the search string, I can't remember if you need to sanitize this, I would always assume you do unless you find out otherwise
По виду:
@products.each do |p|
p.categories.each do |cat|
end
end
Если у вас его еще нет, я очень рекомендую книгу о сфинксе для мышления, доступную по заглушке: https://peepcode.com/products/thinking-sphinx-pdf
Надеюсь, это поможет.