Elastic Search / Tire: Como mapear para atributo de associação?

estou a usarPneu para pesquisa elástica. Na minha aplicação eu tenho 2 modelos; Preço e Produto.

Estou tentando pesquisar minha classe Price e usar o produto ao qual pertence:name atributo para o campo de pesquisa. Agora, se eu tivesse um produto chamadoProduct 1 e digite "pro", "prod" ou "duto", nenhum resultado aparece. Mas digitar "produto" ou "Produto" mostra os resultados. Eu acredito que o problema está no meu mapeamento. Eu olhei para a consulta e sua:

...localhost:3000/search/results?utf8=%E2%9C%93&query=product

Quando penso que deveria ser:

...localhost:3000/search/results?utf8=%E2%9C%93&query:product=product

A julgar por esta pergunta:O mapeamento ElasticSearch não funciona

Eu não sei como fazer meuparams[:query] tomar oproduct.name apenas embora. Eu tentei usar:string params[:query], default_field: "product.name" mas isso não funcionou.

Eu não quero usar o_all campo.

Aqui está o meu código:

Price.rb

  include Tire::Model::Search
  include Tire::Model::Callbacks

  def self.search(params)
    tire.search(load: true, page: params[:page], per_page: 20) do
       query do
         boolean do
            must { string params[:query] } if params[:query].present?
            must { term :private, false }
         end
       end
       sort do
         by :date, "desc"
         by :amount, "asc"
       end
    end
  end

  def to_indexed_json
    to_json( include: { product: { only: [:name] } } )
  end

  mapping do
    indexes :id,        type: "integer"
    indexes :amount,    type: "string", index: "not_analyzed"
    indexes :date,      type: "date",   index: "not_analyzed"
    indexes :private,   type: "boolean"
    indexes :product do
      indexes :name, type: "string", analyzer: "custom_analyzer"
    end
  end

  settings analysis: {
    analyzer: {
      custom_analyzer: {
        tokenizer: [ "whitespace", "lowercase" ],
        filter: [ "ngram_filter", "word_delimiter_filter" ],
        type: "custom"
      }
    },
    filter: {
      ngram_filter: {
        type: "nGram",
        min_gram: 2,
        max_gram: 15
      }
    },
    filter: {
      word_delimiter_filter: {
        type: "word_delimiter",
        generate_word_parts: true,
        generate_number_parts: true,
        preserve_original: true,
        stem_english_possessive: true
      }
    }
  }

Alguém tem alguma sugestão ou sabe como definir o campo de consulta para usar apenas o nome do produto?

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion