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的控制台中执行.

PUT /my-index-order-1?pretty{  "mappings": {    "properties": {      "createTime": {        "type": "long"      },      "orderNo": {        "type": "text"      }    }  }}

插入三条数据

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

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/...

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

POST _aliases{  "actions":[      {        "add":{          "index":"my-index-order-2",          "alias":"my-index-order-1"        }      }    ]}

到此实现mappings字段类型的批改。能够欢快的对createTime做工夫的统计查问了

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

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

查问后果:

{    "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/