Фиксим Elasticsearch::Transport::Transport::Errors::BadRequest

При настройке SearchKiсk функции suggest произошла ошибка - Elasticsearch::Transport::Transport::Errors::BadRequest.

Код в RoR приложении:
class Product < ApplicationRecord
  searchkick suggest: [:title, :description]
end

Product.search(params[:search], fields: [:title, :description], suggest: true)
Код ошибки:
[400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"no mapping found for field [description.suggest]"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"products_development_20200401123557946","node":"txaHD4yFTmWbsFt6vUOvmQ","reason":{"type":"illegal_argument_exception","reason":"no mapping found for field [description.suggest]"}}],"caused_by":{"type":"illegal_argument_exception","reason":"no mapping found for field [description.suggest]","caused_by":{"type":"illegal_argument_exception","reason":"no mapping found for field [description.suggest]"}}},"status":400}
Возвращаюсь в rails c и запускаю Post.reindex. Ошибка не устраняется. Иду в ElasticSearch HQ (веб-интерфейс для ElasticSearch) и на странице Mappings не нахожу нужного индекса указанного в ошибке (description.suggest).

Чтобы заставить работать Post.reindex и избавиться от ошибки - нужно перезапустить rails console. Можно сделать это как обычно - CTRL+C или сделать reload! в самой консольке.
pry(main)> reload!
Reloading...
=> true
После этого запускаем Post.reindex и в ElasticSearch Mappings появится следующая запись:
description: {
  "type": "keyword",
  "fields": {
    "analyzed": {
      "type": "text",
      "analyzer": "searchkick_index"
    },
    "suggest": {
      "type": "text",
      "analyzer": "searchkick_suggest_index"
    }
  },
  "ignore_above": 30000
},
Теперь ошибка Elasticsearch::Transport::Transport::Errors::BadRequest исчезнет.
Наверх