Elasticsearch修改字段类型方案
Elasticsearch的mapings相当于数据库的表结构,在使用过程中可以新增和删除字段,但是不支持修改字段类型,可以通过以下四个步骤来实现
- 创建新的目标index
- 将源index的数据复制到目标index
- 删除源index
- 给目标index设置别名,别名为源index的名称。
或者再建一个名称为源index的目标index2,数据从目标index复制到目标index2
文章图片
源index: my-index-order-1
包含两个字段:
- createTime: 下单时间,类型:long
- orderNo: 订单号,类型:text
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修改字段类型方案】Elasticsearch 版本号: 7.15.2
Kibana 版本号: 7.15.2
Elasticsearch 中文官网 https://www.elastic.co/cn/
推荐阅读
- java|java b2b2c shop 多用户商城系统源码- config 修改配置
- iOS富文本为html时,修改默认字体颜色
- react-navigation|react-navigation 动态修改 tabBar 样式
- 8、Flask构建弹幕微电影网站-搭建后台页面-密码修改、主页控制面板
- ElasticSearch6.6.0强大的JAVA|ElasticSearch6.6.0强大的JAVA API详解
- Elasticsearch|Elasticsearch 简介
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- 06|06 | 全局锁和表锁 (给表加个字段怎么有这么多阻碍((待评论)))
- elasticsearch分析器
- 三十一、|三十一、 Elasticsearch集群搭建部署及配置