illegal_argument_exception_total_fields: Limit of total fields has been exceeded
Elasticsearch의미
인덱스 매핑의 전체 필드 수가 허용 상한(index.mapping.total_fields.limit, 기본 1000)을 초과했다. 새 필드를 추가할 수 없어 인덱싱이 실패한다.
원인
보통 mapping explosion이다. dynamic mapping이 활성화된 상태에서 비정형/가변 키 JSON 문서(예: 키가 사용자 데이터에서 오는 객체)가 새 필드를 모두 매핑에 추가한다. 시간이 지나면서 필드 수가 빠르게 늘어 한도에 도달한다.
해결 방법
근본 원인을 해결하려면 가변 키 데이터를 객체 대신 flattened 필드나 key-value 쌍 배열로 모델링하고, dynamic mapping을 제한한다(dynamic: false 또는 strict). 정말 더 많은 필드가 필요하다면 한도를 신중히 높인다: PUT idx/_settings {"index.mapping.total_fields.limit": 2000}. GET idx/_mapping으로 필드 수를 확인해 mapping explosion을 모니터링한다.
같은 데이터베이스의 다른 항목
- shard_lock_obtain_failed_exceptionObtaining shard lock timed out
- parsing_exceptionFailed to parse the search request / query DSL (검색 요청 / query DSL 파싱 실패)
- max_bytes_length_exceeded_exceptionDocument contains at least one immense term that is too long (너무 긴 거대한 term이 문서에 포함됨)
- verification_exceptionverification_exception: Found N problem(s) — Unknown column / Unknown index (ES|QL, SQL, EQL) (N개 문제 발견 — 알 수 없는 컬럼/인덱스)
- bind_transport_exceptionbind_transport_exception (Address already in use) (주소가 이미 사용 중)
- translog_corrupted_exceptiontranslog_corrupted_exception
- recovery_engine_exceptionrecovery_engine_exception