背景: ES上的原数据接口某字段需要修改类型和配置分词器,但ES不支持修改已存在字段的类型,所以只能重新创建数据结构,且已存在数据不能丢失。
方法:创建新的索引,并创建新的数据结构,将老索引的数据全部迁移到新索引上,然后将给新索引创建别名,别名为老索引,删除老索引,这样线上请求老索引时会映射请求到新索引,使用者感觉不到变化。
1.创建新索引
put 127.0.0.1:9200/newIndex
{
"mappings": {
"newIndex": {
"properties": {
"businessId": {
"type": "long"
},
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}