Elastic Search / Tire: как сопоставить атрибут ассоциации?

Я используюпокрышка для упругого поиска. В моем приложении у меня есть 2 модели; Цена и продукт.

Я пытаюсь найти свой класс Price и использовать продукт, к которому он относится.:name атрибут для поля поиска. Прямо сейчас, если бы у меня был продукт под названиемProduct 1 и введите «pro», «prod» или "воздуховод", никаких результатов не появляется. Но набрав "продукт" или «Продукт» показывает результаты. Я считаю, что проблема заключается в моем отображении. Я посмотрел на запрос и его:

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

Когда я думаю, что это должно быть:

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

Судя по этому вопросу:Сопоставление ElasticSearch не работает

Я не знаю, как сделать мойparams[:query] взятьproduct.name только хотя. Я пытался использовать:string params[:query], default_field: "product.name" но это не сработало.

Я не хочу использовать_all поле.

Вот мой код:

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
      }
    }
  }

Так кто-нибудь есть какие-либо предложения или знает, как настроить поле запроса, чтобы использовать только название продукта?

Спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос