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常见问题1:java.lang.IllegalArgumentException:Limit of total fields [1000] has been exceeded_第1张图片

ElasticSearch控制界面出现以下异常:

java.lang.IllegalArgumentException: Limit of total fields [1000] has been exceeded

ElasticSearch常见问题1:java.lang.IllegalArgumentException:Limit of total fields [1000] has been exceeded_第2张图片

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控制界面出现以下信息表明修改成功。

你可能感兴趣的:(ElasticSearch,total_fields,mapping,total,fields)