Фиксим Elasticsearch::Transport::Transport::Errors::BadRequest
При настройке SearchKiсk функции suggest произошла ошибка - Elasticsearch::Transport::Transport::Errors::BadRequest.
Код в RoR приложении:
Код в 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! в самой консольке.
Чтобы заставить работать 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 исчезнет.