记一次ES修改数据结构的操作
背景: 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
}
},
"analyzer":"ik_max_word"
}
}
}
}
}
2.迁移数据到新索引
post 127.0.0.1:9200/_reindex
{
"source": {
"index": "oldIndex"
},
"dest": {
"index": "newIndex"
}
}
3.创建别名
post 127.0.0.1:9200/_aliases
{
"actions": [
{
"add" : {
"index": "newIndex",
"alias": "oldIndex"
}
}
]
}
4.删除原索引
delete 127.0.0.1:9200/oldIndex
这样就完成了数据结构的修改,虽然ES里的实际索引名换了,但是请求代码不用更改。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)