elasticsearch 更改已有字段的数据类型
【问题背景】:
在elasticsearch中,如果你没有指定字段映射,那么,elasticsearch将对为指定数据类型的字段做动态映射。
例如,当入库的前期数据字段result为数值型时,elasticsearch将其映射为long类型;当入库的后期数据字段result为字符串时,会报数据类型错误。
更改索引blog中的动态映射字段priority数据类型:由long更改为keyword
一:查看原有字段动态映射类型
查看mapping
命令:GET http://localhost:9002/index[索引名]/_mapping
只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping
{
"blog": {
"mappings": {
"article": {
"properties": {
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"counter": {
"type": "long"
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"priority": {
"type": "long"
},
"tags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
二:更改指定字段类型,新建索引blog_new
命令:PUT http://localhost:9002/blog_new
{
"mappings": {
"article": {
"properties": {
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"counter": {
"type": "long"
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"priority": {
"type": "keyword"
},
"tags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
三:将blog数据reindex到blog_new
命令:POST http://localhost:9002/_reindex
{
"source": {
"index": "blog"
},
"dest": {
"index": "blog_new"
}
}
四:删除索引blog
命令:DELETE http://localhost:9002/blog
五:将blog_new数据reindex到blog
命令:POST http://localhost:9002/_reindex
{
"source": {
"index": "blog_new"
},
"dest": {
"index": "blog"
}
}
六:删除索引blog_new
命令:DELETE http://localhost:9002/blog_new