ELK系列之如何改变ES之前数据的类型

ELK系列之如何改变ES之前数据的类型
1、前言

公司有一个部门近期修改了ES的索引模板,我们运维部门在修改的时候有一个字段mid没有指定类型,使用默认的类型,结果导致之前的查询不可用了,查询报错;
报错信息如下:
3 of 76 shards failed

2、查询问题

开始也是没有头脑,无从下手,然后就去问度娘,也是无果;最后我重新拆分查询条件,发现有个字段mid有问题,此时我查看此时段的索引信息,发现mid使用的是默认类型,才恍然大悟;

### 查询索引模板   
GET /_template/logstash_jump  
### 查询指定索引的模板信息   
GET /logstash_jump_mrwso_2020_03_14/_mapping    

3、处理问题

我重新修改ES的索引模板信息如下:

PUT /_template/logstash_jump  
{  
    "index_patterns" : ["logstash_jump*"],  
    "order" : 1,  
    "settings" : {  
        "number_of_shards": 4,  
        "number_of_replicas" : 1  
    },  
"mappings" : {  
      "properties" : {  
        "visitip" : {   
          "type" : "keyword"  
        },  
 "visittime" : {  
          "format" : "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd",  
          "type" : "date"
        },  
        "visit_time_str" : {  
          "type" : "keyword"   
        },   
        "urltype" : {  
          "type" : "keyword"  
        },  
        "code" : {  
          "type" : "keyword"  
        },  
        "request_type" : {  
          "type" : "keyword"  
        },   
        "city" : {  
          "type" : "keyword"   
        },  
        "visit_type" : {  
          "type" : "keyword"  
        },   
        "remark" : {  
          "type" : "keyword"  
        },  
        "sys" : {  
          "type" : "keyword"  
        },  
        "type" : {  
          "type" : "keyword"  
        },   
        "ua" : {  
          "type" : "keyword"  
        },  
        "imp_id" : {  
          "type" : "keyword"  
        },  
        "brower" : {  
          "type" : "keyword"  
        },  
        "apk_diversion" : {
          "type" : "keyword"
        },  
        "province" : {
          "type" : "keyword"
        },  
        "server_ip" : {
          "type" : "keyword"
        },  
        "iframe_type" : {
          "type" : "keyword"
        },   
        "serverip" : {
          "type" : "keyword"
        },   
        "from" : {
          "type" : "keyword"
        },  
        "mid" : {
          "type" : "keyword"
        },   
        "sem_source" : {
          "type" : "keyword"
        },  
        "types" : {
          "type" : "keyword"
        },  
        "visit_time" : {
          "type" : "keyword"
        },  
        "ad_response" : {
          "type" : "keyword"
        },  
        "ad_form" : {
          "type" : "keyword"
        },  
        "cookie_id" : {
          "type" : "keyword"
        },   
        "url" : {
          "type" : "keyword"
        },   
        "visit_ip" : {
          "type" : "keyword"
        },   
        "dwzDiversion_rule_config_json" : {
          "type" : "keyword"
        },  
        "province_id" : {
          "type" : "keyword"
        },  
        "refer" : {
          "type" : "keyword"
        },   
        "device_brand" : {
          "type" : "keyword"
        },  
        "global_log_id" : {
          "type" : "keyword"
        },  
        "domain" : {
          "type" : "keyword"
        },  
        "longurl" : {
          "type" : "keyword"
        },  
        "member_type" : {
          "type" : "keyword"
        },   
        "request_id" : {
          "type" : "keyword"  
        },
        "desc" : {  
          "type" : "keyword"  
        }  
      }  
    },  
    "aliases" : { }  
  }  
3、处理异常数据

ES创建好了mapping后是不允许修改字段类型的,要是我们想修改字段类型怎么办呢?
我们可以采用reindex的方法实现,就是创建一个新的mapping,里面的字段类型按照新的类型定义,然后使用reindex的方法把原来的数据拷贝到新的index下面;

[root@VM_185_109_centos ~]# curl  -X POST "127.0.0.1:9200/_reindex" -H 'Content-Type: application/json' -d'  
> {   
>   "source": {  
>     "index": "logstash_jump_suoim_2020_03_12"  
>   },  
>   "dest": {  
>     "index": "logstash_jump_suoim_2020_02_12"  
>   }  
> }'  

说明:此时查询logstash_jump_suoim_2020_02_12的mid数据类型就正常了;

4、总结

我们在处理突发问题的时候有可能一时间无从下手,但是我们一定要进行下去,一定要开头,万事开头难,当我们开头处理的时候就会有可能柳暗花明,处理问题的过程中,我们有可能查询到原因。
实话:这个偏文档解决了如何创建ES的索引模板,如何迁移索引数据、如何改变数据的类型。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值