Как я ответил на Thinking группы Sphinx Google:
Потому что вы ищете на издателей, это индекс Publisher вам нужно изменить, чтобы получить эту работу. Я предполагаю, что издатель принадлежит_to: country_report, country report принадлежит_to: страна и страна принадлежит_to: континент.
Если вы используете индексы SQL спинками (с использованием: с =>: вариант active_record), то вы хотите, следующие в индексе Издательство:
has country_report.country.continent_id, :as => :continent_id
Если вы используете реальный -Времени индексы (: с =>: real_time), то это то же самое, но вы должны указать тип, а также:
has country_report.country.continent_id, :as => :continent_id, :type => :integer
Однако, если есть has_many или has_and_belongs_to_many вместо belongs_to в этой цепочке ассоциаций из издателя на континент, то это немного сложнее. Кроме того, в этом случае у издателя может быть более одного континента, поэтому здесь мы имеем дело с несколькими значениями.
Для индексов SQL спинок, незначительные изменения, изменять ассоциации цепочки:
has country_reports.country.continent_id, :as => :continent_ids
Но с индексом в реальное время, то лучше иметь метод на модели Publisher, которая возвращает нужное значение или значения, а затем использовать его в индексе:
# in app/models/publisher.rb
def continent_ids
country_reports.collect(&:country).collect(&:continent_id)
end
# in app/indices/publisher_index.rb
has continent_ids, :type => :integer, :multi => true
а потом, когда вы перестроили свой индекс, вы можете найти следующий образ (с атрибутом является множественным числом, если это уместно):
Publisher.search “foo”, :with => {:continent_id => continent.id}
Это может работы, а также (множественные уровни ассоциаций могут запутать, хотя):
continent.publishers.search “foo”