2016-12-23 3 views
0

Моей модели ассоциации: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?

ответ

0

Я бы порекомендовал использовать драгоценный камень Searchkick. Вы можете объединить различные атрибуты между моделями в своем поисковом запросе, чтобы помочь изменить область поиска. Это отличный камень в целом.

+0

спасибо за рекомендую. я попробую –

Смежные вопросы