ES修改索引mapping

最近在优化一个小车里程统计的功能,之前同事是把数据存到es中,但是由于他把时间戳设计成了long类型,导致使用时间聚合统计的时候无法使用时区,具体可以参考es的isues:https://github.com/elastic/elasticsearch/issues/42270。参考其给出的建议需要把timestamp字段从long类型改成date类型。整体思路分为以下几步,操作的页面在kibana的Management->Dev tool

image.png

还有要注意的地方是在kibana页面,有时候看不到索引的文档,需要reflush刷新一下缓存,并不是文档没有写进去,而是没有加载出来。经验证下面的运行的脚本指令对7.8.0版本有效,对于低版本6.8.10则不起效果。工作中由于一台测试服务器使用的是6.8.10,后来使用docker升级到了7.8.0才起作用。

1. 新建索引

PUT log_car_milage_1

2. 指定新建索引的mapping(把timestamp字段从long类型改成date类型)

POST /log_car_milage_1/_mapping
{
    "properties" : {
    "deviceId" : {
        "type" : "text",
        "fields" : {
        "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
        }
        }
    },
    "device_id" : {
        "type" : "text",
        "fields" : {
        "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
        }
        }
    },
    "distance" : {
        "type" : "long"
    },
    "milage" : {
        "type" : "long"
    },
    "timestamp" : {
        "type" : "date"
    }
  }
}

3. 从旧索引导入数据到新索引

POST _reindex
{
  "source": {
    "index": "log_car_milage"

  },
  "dest": {
    "index": "log_car_milage_1",
  }
}

4. 删除旧索引

DELETE /log_car_milage

5. 给新索引添加别名(旧索引的名称)

POST /_aliases
{
    "actions": [
        { "add": {
            "alias": "log_car_milage",
            "index": "log_car_milage_1"
        }}
    ]
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容