美文网首页
ES自动创建索引导致类型不匹配的坑。

ES自动创建索引导致类型不匹配的坑。

作者: 明翼 | 来源:发表于2018-08-27 11:01 被阅读318次

前言

目前在线上的环境,突然发现个严重问题,我们创建的索引有的字段的类型是不对的。

原因

按照我们在索引的时候会先判断是否需要创建索引,如果不存在则创建索引,创建索引的时候带Map信息,这样数据不应该是和我们字段是不一致的。

可能原因猜测

建索引目前是多进程多线程并发,创建索引的可能Elasticsearch还没有来得及建好,数据已经发过来了,按照es的默认配置是会自动创建索引的,所以导致了部分索引数据字段类型的不一致问题。

解决办法

自然是自动创建索引惹的祸,那就禁止自动创建索引好了,禁止命令如下,在elasticsearch.yml中配置:

action.auto_create_index: +first*,-full*,+.watches*,+.triggered_watches,+.watcher-history-*,+.kibana*

+号后面的索引表示可以自动创建。
-号后面的索引表示不能自动创建。

后记

后来发现是不能自动创建索引了,还存在着类型不一致的问题,后面通过配置:
index.mapper.dynamic=false
限制自动创建索引。

也通过了索引模板的方式建索引,希望可以规避这个问题。
提供一个例子:

PUT _template/firstcorrelation_template 
{
  "template": "firstcorrelation*",
  "settings": {
    "index": {
      "codec": "best_compression",
      "routing": {
        "allocation": {
          "total_shards_per_node": "2"
        }
      },
      "refresh_interval": "120s",
      "number_of_shards": "36",
      "translog": {
        "flush_threshold_size": "800mb",
        "sync_interval": "120s",
        "durability": "async"
      },
      "merge": {
        "scheduler": {
          "max_thread_count": "1"
        }
      },
      "max_result_window": "100000",
      "number_of_replicas": "0"
    }
    
  },
    "mappings": {
      "aus_type": {
        "_source": {
          "enabled": true
        },
        "_all": {
          "enabled": false
        },
        "properties": {
          "collectTime": {
            "format": "yyyy-MM-dd HH:mm:ss.SSS||epoch_millis||epoch_second",
            "type": "date"
          },
          "recordTime": {
            "format": "yyyy-MM-dd HH:mm:ss.SSS||epoch_millis||epoch_second",
            "type": "date"
          },
          "rawMsg": {
            "index": "analyzed",
            "type": "text"
          },
          "logtype": {
            "index": "not_analyzed",
            "store": "yes",
            "type": "byte"
          },
          "username": {
            "index": "analyzed",
            "store": "yes",
            "type": "keyword"
          }
        }
      }
    }
}

相关文章

  • ES自动创建索引导致类型不匹配的坑。

    前言 目前在线上的环境,突然发现个严重问题,我们创建的索引有的字段的类型是不对的。 原因 按照我们在索引的时候会先...

  • ES 相关语句

    ES: 查看索引 添加 创建索引 创建类型 查询

  • Elasticsearch 教程-精确查询(1)-数据准备

    1. 创建索引及类型 索引名:order 类型名:order 创建脚本: ES 5.*之后,把string字段设置...

  • elasticSearch

    CRUL索引 文档/索引/类型/id(指定或者自动生成)重点是如何创建索引

  • ES简单实用DSL查询

    ES版本信息 查看所有索引 查看字段类型 创建索引 删除索引 批量(_bulk)加载数据 查询数据 查询1000条...

  • 基于 IK 分词器的 ES 通用索引模板

    一、索引模板 1、模板简述 ES 允许用户定义一系列模板,当索引被创建的时候,模板的设置会自动被应用到新创建的索引...

  • Mysql常见索引失效情况

    1.被索引字段发生隐式转换 Mysql执行器在执行sql查询的时候,会自动将与原字段类型不匹配的值进行类型转换 我...

  • 《Elasticsearch技术解析与实战》Chapter 1.

    1. 新增文档,建立索引 语法格式: 输入: 输出: es会自动建立index和type,不需要提前创建,而且es...

  • 51-MySQL-索引的设计原则

    一、高效索引 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。索引设计不...

  • 安装ES

    命令 ES_JAVA_OPTS参数是为了避免Java内存溢出。 命令: postman自动插入数据,创建索引: 安...

网友评论

      本文标题:ES自动创建索引导致类型不匹配的坑。

      本文链接:https://www.haomeiwen.com/subject/gvlziftx.html