(5条消息) ElasticSearch常见问题1:java.lang.IllegalArgumentException:Limit of total fields [1000] has been exceeded
1.问题描述
从MongoDB中向ElasticSearch中导入数据时,导入数据界面和ElasticSearch控制界面分别出现以下异常:
导入程序出现以下异常:
ERROR 2021/03/10 17:06:00 index: [wdlacs__devicetest _doc 60488289290c6fd5947a6028 {illegal_argument_exception Limit of total fields [1000] has been exceeded %!s(bool=false) map[] [] []}], type: %!s(MISSING), _id: %!s(MISSING), error: %!v(MISSING)
ElasticSearch控制界面出现以下异常:
java.lang.IllegalArgumentException: Limit of total fields [1000] has been exceeded
2.问题原因
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping.html#mapping-type
mapping 做了映射保护,防止mapping 爆炸。
index.mapping.total_fields.limit:本设置允许您限制可手动或动态创建的字段映射的数量,以防止错误的文档导致映射爆炸,索引中的最大字段数。默认值为1000。
index.mapping.depth.limit:字段的最大深度,以内部对象的数量来衡量。例如,如果所有字段都是在根对象级别定义的,则深度为1;如果有一个对象映射,则深度为 2,等等。默认值为20。
index.mapping.nested_fields.limit:nested索引中的最大字段数,默认为50。使用100个嵌套字段索引1个文档实际上索引101个文档,因为每个嵌套文档都被索引为单独的隐藏文档。
3.解决办法
使用以下指令将index.mapping.total_fields.limit从默认的1000修改为50000,其中wdlacs__devicetest为需要修改的索引名称,可以根据上图中出现异常错误信息获得。curl -H "Content-Type: application/json" -XPUT http://10.8.20.137:9200/wdlacs__devicetest/_settings -d '{"index.mapping.total_fields.limit": 50000}'
ElasticSearch控制界面出现以下信息表明修改成功。