#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