max_bytes_length_exceeded_exception: Document contains at least one immense term that is too long (너무 긴 거대한 term이 문서에 포함됨)
Elasticsearch의미
인덱싱 중인 문서에서 term(특히 keyword/분석되지 않는 필드 값)이 허용 최대 바이트 길이(32766바이트)를 초과했다. Lucene은 그렇게 긴 term을 인덱싱할 수 없다.
원인
매우 긴 텍스트 값을 keyword 필드에 (통째로) 쓴 경우다. 예: 문서 본문 전체, base64 데이터, 긴 URL/식별자를 keyword 필드에 넣은 경우. keyword 필드는 분석되지 않으므로 값이 단일 term으로 인덱싱되어 한도를 초과한다.
해결 방법
긴 텍스트에는 text(분석) 필드를 사용한다. keyword는 정확한 일치가 필요한 짧은 값 전용이다. 값을 제한하려면 매핑에 ignore_above를 사용한다(이보다 긴 값은 인덱싱되지 않지만 저장은 된다). 필요 없다면 매우 긴 필드를 index:false로 설정한다. 데이터 유형에 따라 필드 설계(text vs keyword)를 재검토한다.
같은 데이터베이스의 다른 항목
- too_many_buckets_exceptionTrying to create too many buckets
- shard_lock_obtain_failed_exceptionObtaining shard lock timed out
- parsing_exceptionFailed to parse the search request / query DSL (검색 요청 / query DSL 파싱 실패)
- illegal_argument_exception_total_fieldsLimit of total fields has been exceeded
- 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