ElasticSearch 之 防止Mapping爆炸

1 故事背景

某天同事跟我说,ES数据不能进行插入,查询集群日志html

requests java.lang.IllegalArgumentException: Limit of total fields [1000] in index [my_index] has been exceededjava

2 Mapping 说明

原文地址: https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping.html#mapping-typeapp

mapping 作了映射保护,防止mapping 爆炸elasticsearch

如下设置容许您限制可手动或动态建立的字段映射的数量,以防止错误的文档致使映射爆炸:ide

index.mapping.total_fields.limit:ui

索引中的最大字段数。默认值为1000设计

index.mapping.depth.limit:日志

字段的最大深度,之内部对象的数量来衡量。例如,若是全部字段都是在根对象级别定义的,则深度为1。若是有一个对象映射,则深度为 2,等等。默认值为20。code

index.mapping.nested_fields.limithtm

nested索引中的最大字段数,默认为50。使用100个嵌套字段索引1个文档实际上索引101个文档,由于每一个嵌套文档都被索引为单独的隐藏文档

3 临时解决方案修改setting

PUT my_index/_settings
{
    "index.mapping.total_fields.limit": 2000
}

此方法治标不治本,也是极力不推荐,出现这种状况彻底由于在设计mapping的时候考虑欠缺,业务场景不明确,是否适合此mapping设计