一、重建索引
- es的索引一旦创建,只允许添加字段,不允许更改字段,因为改变字段需要重建倒排索引,影响内部缓存结构,性能太低。
# 使用reindex拷贝数据
POST _reindex
{
"source": {
"index": "index_v1"
},
"dest": {
"index": "index_v2"
}
}
完整脚本为:
# 重建索引
# 新建索引:index_v1,注意:索引名称必须全部小写
PUT index_v1
{
"mappings": {
"properties": {
"birthday":{
"type": "date"
}
}
}
}
PUT index_v1/_doc/id1
{
"birthday":"1995-05-10"
}
# 业务变更,需要改变birthday字段的类型为text
# 1、创建新的索引index_v2
# 2、将v1数据拷贝到v2
# 创建v2
PUT index_v2
{
"mappings": {
"properties": {
"birthday":{
"type": "text"
}
}
}
}
# 使用reindex拷贝数据
POST _reindex
{
"source": {
"index": "index_v1"
},
"dest": {
"index": "index_v2"
}
}
PUT index_v2/_doc/id2
{
"birthday":"1995年5月10日"
}
GET index_v2/_search
二、索引别名
前面的说到由于业务需求重建了索引,但java代码中还是使用的v1,为了避免修改代码,采用索引别名的方式来解决。
# 索引别名
# v2取代了v1,但为了不修改代码,采用索引别名
# 步骤:
# 1、先删除index_v1
DELETE index_v1
# 2、给index_v2设置一个别名:index_v1
POST index_v2/_alias/index_v1
GET index_v1/_search
GET index_v2/_search