前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch修改字段类型方案

Elasticsearch修改字段类型方案

作者头像
Mshu
发布2022-03-22 14:21:46
2.2K0
发布2022-03-22 14:21:46
举报
文章被收录于专栏:咸鱼不闲

Elasticsearch的mapings相当于数据库的表结构,在使用过程中可以新增和删除字段,但是不支持修改字段类型,可以通过以下四个步骤来实现

  1. 创建新的目标index
  2. 将源index的数据复制到目标index
  3. 删除源index
  4. 给目标index设置别名,别名为源index的名称。 或者再建一个名称为源index的目标index2,数据从目标index复制到目标index2

下面举个例子

源index: my-index-order-1 包含两个字段:

  • createTime: 下单时间,类型:long
  • orderNo: 订单号,类型:text

以下操作都是在Kinbana的控制台中执行.

代码语言:javascript
复制
PUT /my-index-order-1?pretty
{
  "mappings": {
    "properties": {
      "createTime": {
        "type": "long"
      },
      "orderNo": {
        "type": "text"
      }
    }
  }
}

插入三条数据

代码语言:javascript
复制
PUT /my-index-order-1/_doc/1?pretty
{
  "createTime": 1637992973517,
  "orderNo": "7d7d5495-4db9-4513-a2c9-c5fb0454517e"
}
PUT /my-index-order-1/_doc/2?pretty
{
  "createTime": 1637993092000,
  "orderNo": "fb337ede-6e1d-4422-8e2b-453148064bba"
}
PUT /my-index-order-1/_doc/3?pretty
{
  "createTime": 1640585092000,
  "orderNo": "54ccb3a9-c168-487e-8594-893a2b7803bf"
}
需求分析:把my-index-order-1的createTime字段类型从long类型修改成date类型
1. 创建新的目标index
代码语言:javascript
复制
PUT /my-index-order-2?pretty
{
  "mappings": {
    "properties": {
      "createTime": {
        "type": "date"
      },
      "orderNo": {
        "type": "text"
      }
    }
  }
}
2. 将源index的数据复制到目标index

reindex 命令可以实现两个index之间数据的拷贝,

两个index的mappings不同,只会拷贝互相兼容的数据。

如果复制的数据量比较大,_reindex请求会超时,不要着急,数据拷贝还在继续, 可以通过GET _tasks?detailed=true&actions=*reindex命令查询正在执行的任务, GET _tasks/taskId:number查询某一个任务的执行详情。

reindex更多参数参考官方文档: https://www.elastic.co/guide/...

代码语言:javascript
复制
POST _reindex
{
  "source": {
    "index": "my-index-order-1"
  },
  "dest": {
    "index": "my-index-order-2"
  }
}
3. 删除源index

DELETE /my-index-order-1/

4. 给目标index设置别名,别名为源index的名称

给my-index-order-2加上my-index-order-1的别名后,可以直接通过my-index-order-1来操作my-index-order-2

代码语言:javascript
复制
POST _aliases
{
  "actions":[
      {
        "add":{
          "index":"my-index-order-2",
          "alias":"my-index-order-1"
        }
      }
    ]
}

到此完成mappings字段类型的修改。可以愉快的对createTime做时间的统计查询了

比如统计每个月的下单量:

代码语言:javascript
复制
GET /my-index-order-2/_search?pretty
{
  "size": 0,
  "aggs": {
    "orderCount": {
      "date_histogram": {
        "field": "createTime",
        "calendar_interval": "1M",
        "format": "yyyy-MM"
      }
    }
  }
}

查询结果:

代码语言:javascript
复制
{
    "took": 27,
    "timed_out": false,
    "_shards": {
        ....
    },
    "hits": {
        ....
    },
    "aggregations": {
        "orderCount": {
            "buckets": [
                {
                    "key_as_string": "2021-11",
                    "key": 1635724800000,
                    "doc_count": 2
                },
                {
                    "key_as_string": "2021-12",
                    "key": 1638316800000,
                    "doc_count": 1
                }
            ]
        }
    }
}

Elasticsearch 版本号: 7.15.2 Kibana 版本号: 7.15.2 Elasticsearch 中文官网 https://www.elastic.co/cn/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求分析:把my-index-order-1的createTime字段类型从long类型修改成date类型
  • 1. 创建新的目标index
  • 2. 将源index的数据复制到目标index
  • 3. 删除源index
  • 4. 给目标index设置别名,别名为源index的名称
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档