searchkick 400 Searchkick :: InvalidQueryError для предложений

#ruby-on-rails #elasticsearch #searchkick

#ruby-on-rails #elasticsearch #searchkick

Вопрос:

У кого-то такая проблема с searchkick? Я сделал что-то не так?

article.rb

 searchkick suggest: [:status]
scope :search_import, -> { includes(:author, :medium, :tags) }
has_many :article_tags
has_many :tags, through: :article_tags
belongs_to :author
belongs_to :medium
  

article_controller.rb

 def search_article
   result_articles = Article.search params[:search],
                                 suggest: true,
                                 fields: %i[title body author.name status],
                                 page: params[:page],
                                 per_page: params[:per_page]


   render json: { result_articles: result_articles , time: result_articles.took, suggestion: 
   result_articles.suggestions }

 end
  

Searchkick ::InvalidQueryError ([400] {«ошибка»:{«root_cause»:[{«type»:»illegal_argument_exception»,»причина»:»не найдено сопоставления для поля [status.suggest]»}], «type»:»search_fase_execution_exception», «причина»: «все осколки failed»,»phase»:»query»,»grouped»:true,»failed_shards»:[{«shard»:0,»index»:»articles_development_20200918194930310″,»node»:»hVbRSnSiQGW6xSM7pG-36A»,»reason»:{«type»:»illegal_argument_exception»,»причина»:»не найдено сопоставления для поля [status.suggest]»}}],»caused_by»:{«type»:»illegal_argument_exception», «причина»:»не найдено сопоставления для поля [status.suggest]», «caused_by»:{«тип»: «illegal_argument_exception»,»причина»: «не найдено сопоставления для поля [status.suggest]»}}}, «статус»: 400}):

Ответ №1:

 fields: %i[title body author.name status]
  

переведено на

 fields: [:title, :body, :"author.name", :status]
  

вы заметили :"author.name" ? в вашей базе данных наверняка не будет такого столбца.

Если вы хотите выполнить поиск по author имени, предполагая article , что оно есть author , вам нужно проиндексировать его как файл, подобный author_name вашему search_data методу в Article модели, и тогда вы сможете выполнить поиск с помощью

 fields: %i[title body author_name status]
  

Комментарии:

1. спасибо за ваш ответ, моя проблема связана с suggestionts, а не с author_name