illegal_argument_exception_total_fields: Limit of total fields has been exceeded(フィールド総数の上限を超えた)
Elasticsearch意味
インデックスマッピングのフィールド総数が許容上限 (index.mapping.total_fields.limit、デフォルト 1000) を超えた。新しいフィールドを追加できないため、インデックス作成が失敗する。
原因
通常はマッピング爆発: 動的マッピングが有効な状態で、非構造化/可変キーの 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(検索要求 / query DSL の解析に失敗)
- max_bytes_length_exceeded_exceptionDocument contains at least one immense term that is too long(ドキュメントに長すぎる巨大な term が少なくとも 1 つ含まれる)
- 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