illegal_argument_exception_total_fields: Limit of total fields has been exceeded
ElasticsearchЧто это значит?
Общее число полей в маппинге индекса превысило допустимый верхний лимит (index.mapping.total_fields.limit, по умолчанию 1000). Индексирование завершается ошибкой, так как новые поля невозможно добавить.
Почему возникает?
Обычно это взрыв маппинга (mapping explosion): при включённом динамическом маппинге неструктурированные JSON-документы с переменными ключами (например, объекты, ключи которых берутся из пользовательских данных) добавляют каждое новое поле в маппинг. Со временем число полей быстро растёт и достигает лимита.
Как исправить
Чтобы устранить первопричину, моделируйте данные с переменными ключами полем flattened или как массив пар ключ-значение вместо объектов; ограничьте динамический маппинг (dynamic: false или strict). Если вам действительно нужно больше полей, осторожно повысьте лимит: PUT idx/_settings {"index.mapping.total_fields.limit": 2000}. Отслеживайте взрыв маппинга, проверяя число полей с помощью GET idx/_mapping.
Ещё по этой СУБД
- shard_lock_obtain_failed_exceptionObtaining shard lock timed out
- parsing_exceptionFailed to parse the search request / query DSL
- max_bytes_length_exceeded_exceptionDocument contains at least one immense term that is too long
- verification_exceptionverification_exception: Found N problem(s) — Unknown column / Unknown index (ES|QL, SQL, EQL)
- bind_transport_exceptionbind_transport_exception (Address already in use)
- translog_corrupted_exceptiontranslog_corrupted_exception
- recovery_engine_exceptionrecovery_engine_exception