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
}
}
}
Так кто-нибудь есть какие-либо предложения или знает, как настроить поле запроса, чтобы использовать только название продукта?
Спасибо.