Elasticsearch默认fields1000报错解决

背景:由于日志输出调整,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"字段,这个字段的数值越低,优先级越高,优先级高的模板会覆盖优先级低的模板