报错现象
代码语言:javascript复制[o.e.a.a.i.m.p.TransportPutMappingAction] [------nodeid-------] failed to put mappings on indices [[[--------IndexName---------]]], type [doc]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [--------IndexName---------] has been exceeded
at org.elasticsearch.index.mapper.MapperService.checkTotalFieldsLimit(MapperService.java:656) ~[elasticsearch-6.8.2.jar:6.8.2]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:537) ~[elasticsearch-6.8.2.jar:6.8.2]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:415) ~[elasticsearch-6.8.2.jar:6.8.2]
报错解析
此问题为写入时报错,ES中默认限制单个索引1000个字段,因为索引中定义太多的字段会导致 mapping 的激增,从而引起内存的错误和难以恢复的情况。
此问题常见于日志拆分后,自动更新更新mapping,由于日志拆分逻辑异常,导致很多异常字段被误认为是新字段,导致索引maaping字段激增大于1000.导致更新报错。
解决方案
1-调整索引setting,临时增大字段数限制,下述方式中my_index为报错的index名。
代码语言:javascript复制PUT my_index/_settings
{
"index.mapping.total_fields.limit": 2000
}
此处设置为2000 最大索引
2-检查业务侧导致字段数激增的原因,减少单个索引字段数量。