**背景:**由于日志输出调整,ES出现了很多如下的报错,这个issue可以在这个github地址找到,另外还有5.0版本关于这个问题的说明。 我的ES版本为:5.0.0(直接curl yourip:9200就可以看到)

This is to prevent mapping explosion when dynamic keys such as UUID are used as field names. index.mapping.total_fields.limit specifies the total number of fields an index can have. An exception will be thrown when the limit is reached. The default limit is 1000. Value 0 means no limit. This setting is runtime adjustable – – – 以上摘自yanjunh对于该issue的答复

报错如下:

  • 报错信息

    [2017-11-18T00:00:03,102][DEBUG][o.e.a.b.TransportShardBulkAction] [vpc1-ip-1] [bilogs-logics-202.2017.11.17][2] failed to execute bulk item (index) …omitted…java.lang.IllegalArgumentException: Limit of total fields [1000] in index [bilogs-logics-log] has been exceeded

解决方案:

**说明:**对于已经建立的索引可以通过设置fields进行修复,对于之后的将建立的索引通过设置template进行设置

  • 对于已经建立的索引
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    curl -XPUT yourEShost:port/your_index_name/_settings -d '{"index.mapping.total_fields.limit": 0}'
    #以上表示对于‘your_index_name’这个索引设置fields为无限制,默认为1000
    curl -XPUT 10.0.1.1:9200/*/_settings -d '{"index.mapping.total_fields.limit": 50000}'
    #这个表示对所有index的fields的limit设置为50000
    curl 10.0.1.1:9200/_cat/indices/*?pretty
    #查看所有索引,查看指定索引将*换为索引名称即可
    curl -XGET 10.0.1.1:9200/_all/_settings?pretty
    #查看所有索引的设置
    curl 10.0.1.1:9200/bilogs-logics-202.2017.11.21/_settings?pretty
    #查看单个索引的设置
    curl 10.0.1.1:9200/bilogs-logics-202.2017.11.23/_mapping?pretty
    #查看单个索引的map
    
  • 对于未创建的索引,可以通过模板设置
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    curl -XPUT '10.0.1.1:9200/_template/all ' -d '
    {
      "template": "*",
      "settings": {
        "index.mapping.total_fields.limit": 50000,
        "refresh_interval": "30s"
      }
    }'
    #设置template的setting,
    curl -XGET 10.33.3.191:9200/_template/*?pretty
    #查看所有模板的设置,使用了*匹配,如果看指定的模板将*换成对应模板名即可,另外这里可以看到每个模本都有一个"order"字段,这个字段的数值越低,优先级越高,优先级高的模板会覆盖优先级低的模板