Главная / Справочник ошибок / Elasticsearch
Слишком длинное значение в поле с неподходящим типом
Document contains at least one immense term in field="content" (whose UTF8 encoding is longer than the max length 32766)
Document contains at least one immense term, max length 32766, max_bytes_length_exceeded_exception: длинный текст попал в поле типа keyword. Почему переиндексация не помогает и как исправить тип поля.
Что это значит
Elasticsearch хранит поле типа keyword одним неделимым значением, и его длина ограничена 32766 байтами. В такое поле пришёл длинный текст, например содержимое документа. Запись этого документа отклонена, остальные индексируются.
Корень проблемы в типе поля. Текст для полнотекстового поиска должен лежать в поле типа text. Тип keyword поле получает, когда индекс создан без нужного шаблона и Elasticsearch сам угадал тип, либо когда шаблон задан неверно.
Как проверить
GET <индекс>/_mapping/field/<имя поля>
Ответ "type": "keyword" для поля с длинным текстом подтверждает причину.
Что сделать
- Тип существующего поля изменить нельзя. Повторная индексация в тот же индекс ошибку не уберёт.
- Правильный путь: создать новый индекс с верным описанием полей и перенести данные через
_reindex, либо пересоздать индекс штатной процедурой системы. - Если поле действительно должно быть
keyword, а длинные значения можно не индексировать, добавить к немуignore_above: длинные значения будут сохраняться без индексации, ошибка исчезнет. - Проверить шаблон индексов, чтобы новый индекс снова не создался с угаданными типами.