Моей модели ассоциации:ElasticSearch-Rails multi_match полого
class CertificatePeriod < ActiveRecord::Base
has_many :certificate_orders
has_many :order_transactions, through: :certificate_orders
end
class CertificateOrder < ActiveRecord::Base
belongs_to :user
belongs_to :certificate_period
has_one :order_transaction
end
class OrderTransaction < ActiveRecord::Base
belongs_to :certificate_order
end
В OrderTransaction модели:
class OrderTransaction < ActiveRecord::Base
def as_indexed_json(options={})
self.as_json(only: [:id, cardholdername, :userid],
include: {certificate_order: {include: {user: {only: [:first_name, :last_name], methods: :full_name}}}})
end
end
Пример ответ этого индексируются:
{"id"=>7235,
"cardholdername"=>"NUR SARUHAN",
"userid"=>"zzzyyyxxxx",
"certificate_order"=>
{"id"=>292,
"user_id"=>13186,
"certificate_enrollment_id"=>768,
"slug"=>"eafe0be5-0b1f-4e4f-8929-d3f9330a4a86f7c25b1199dcd5",
"created_at"=>Mon, 11 Apr 2016 18:30:58 EEST +03:00,
"updated_at"=>Mon, 11 Apr 2016 18:30:58 EEST +03:00,
"user"=>{"first_name"=>"Nur", "last_name"=>"SARUHAN", "full_name"=>"NUR SARUHAN"}}}
Я использовал поиск чего-то запрос, как это:
query: {
bool: {
must: [
{ids: {values: @certificate_period.order_transactions.pluck(:id)}},
{bool: {
should: [
{multi_match: {query: params[:q], fields: ['cardholdername', 'certificate_order.user.first_name']}}
]
}}
]
}
}).records.to_a
Мой вопрос:
На самом деле этот поисковый запрос работает, но следующие строки будут возвращены точно такие же записи.
{multi_match: {query: params[:q], fields: ['cardholdername', 'certificate_order.user.first_name']}}
и
{multi_match: {query: params[:q], fields: ['cardholdername']}}
Он возвращается пустой массив, если я просто использовать certificate_order.user.first_name
в качестве параметра в multi_match полях. Таким образом, эффект certificate_order.user.first_name
отсутствует. У меня есть googled в течение 3 дней, но я не нашел правильного ответа. Что мне нужно сделать, чтобы получить значение параметра certificate_order.user.first_name
?
спасибо за рекомендую. я попробую –