需求说明:在业务中遇到创建索引属性类型存在问题,导致查询异常,现在就是要更改现有索引属性类型,同时保留现有数据,因此了解到重建索引,并记录下来。
一、重建索引流程
文中所有请求都是使用postman
{{es_url}} 为postman全局配置:es服务地址:端口、如果有身份验证请加上用户密码
tips:本人非线上操作,删除需谨慎
ES查看版本
GET {{es_url}}
执行结果
{
"name": "vDPYm0I",
"cluster_name": "docker-cluster",
"cluster_uuid": "ixK-WIooRoiecvXWOkLz5A",
"version": {
"number": "6.8.6",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "3d9f765",
"build_date": "2019-12-13T17:11:52.013738Z",
"build_snapshot": false,
"lucene_version": "7.7.2",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}
1、老索引添加别名
首先,老索引添加别名,请求索引别名可以访问到老索引数据
POST {{es_url}}/_aliases
{
"actions": [
{
"add": {
"index": "old_index",
"alias": "old_index_alias"
}
}
]
}
执行结果
{
"acknowledged": true
}
2、创建新索引
然后创建新索引,new_index
索引字段属性在这一步骤重定义了
PUT {{es_url}}/new_index
{
"mappings": {
"_doc": {
"properties": {
}
}
}
}
执行结果
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "new_index"
}
3、copy老索引数据到新索引
将老索引数据拷贝到新索引中,本文中不探讨数据迁移时间等问题
迁移完之后可以看下数据是否一致
POST {{es_url}}/_reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
执行结果
{
"took": 13,
"timed_out": false,
"total": 7,
"updated": 0,
"created": 7,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
4、替换别名
新索引将别名指向第1步老索引建立的别名,同时删除老索引别名
执行完这个步骤之后就可以看到更改后的效果啦
POST {{es_url}}/_aliases
{
"actions": [{
"add": {
"index": "new_index",
"alias": "old_index_alias"
}
},
{
"remove": {
"index": "old_index",
"alias": "old_index_alias"
}
}
]
}
执行结果
{
"acknowledged": true
}
5、删除旧索引
执行这个步骤前需要先验证下是否正常
DELETE {{es_url}}/old_index
执行结果
{
"acknowledged": true
}
二、扩展操作
如果想保留老索引的名称,可以在重建索引之后,再次执行一波操作,将新索引数据迁移到老索引,这样可以保留老索引名称不变,同时别名也可以移除
建立新索引,索引名称为老索引名称
走第2步流程创建老索引old_index
将现在的索引数据迁移到新建索引中
参照第3步流程
执行完这个步骤之后,使用新建的索引名为old_index进行验证数据是否正常
如果一切正常使用,此时可以将new_index索引移除
使用扩展操作的好处在于可以不改变使用的原索引名称