Elasticsearch, Tire, y consultas / asociaciones anidadas con ActiveRecord

Estoy usando ElasticSearch with Tire para indexar y buscar algunos modelos de ActiveRecord, y he estado buscando la forma "correcta" de indexar y buscar asociaciones. No he encontrado lo que parece ser una buena práctica para esto, así que quería preguntar si alguien tiene un enfoque que crea que funciona realmente bien.

Como ejemplo de configuración (esto está compuesto pero ilustra el problema), digamos que tenemos un libro, con capítulos. Cada libro tiene un título y autor, y un montón de capítulos. Cada capítulo tiene texto. Queremos indexar los campos del libro y el texto de los capítulos para que pueda buscar un libro por autor o cualquier libro con ciertas palabras en él.

class Book < ActiveRecord::Base
  include Tire::Model::Search
  include Tire::Model::Callbacks

  has_many :chapters

  mapping do
    indexes :title, :analyzer => 'snowball', :boost => 100
    indexes :author, :analyzer => 'snowball'
    indexes :chapters, type: 'object', properties: {
      chapter_text: { type: 'string', analyzer: 'snowball' }
    }
  end
end

class Chapter < ActiveRecord::Base
  belongs_to :book
end

Entonces hago la búsqueda con:

s = Book.search do
  query { string query_string }
end

Eso no funciona, aunque parece que la indexación debería hacerlo. Si por el contrario indizo:

indexes :chapters, :as => 'chapters.map{|c| c.chapter_text}.join('|'), :analyzer => 'snowball'

Eso hace que el texto se pueda buscar, pero obviamente no es un buen truco y pierde el objeto asociado real. He intentado variaciones de la búsqueda, como:

s = Book.search do
  query do
    boolean do
      should { string query_string }
      should { string "chapters.chapter_text:#{query_string}" }
    end
  end
end

Sin suerte, tampoco. Si alguien tiene un buen ejemplo claro de indexación y búsqueda de objetos ActiveRecord asociados que usan Tyre, parece que eso sería una muy buena adición a la base de conocimientos aquí.

Gracias por cualquier idea y contribución.

Respuestas a la pregunta(2)

Su respuesta a la pregunta