准备工作
//删除索引
DELETE /nba
//新增索引,设置mapping
PUT /nba
{
"mappings": {
"properties": {
"jerseyNo": {
"type": "text"
},
"playName": {
"type": "text"
}
}
}
}
//批量导数据
POST _bulk
{"index":{"_index":"nba","_type":"_doc","_id":"1"}}
{"playName":"张三","jerseyNo":"10"}
{"index":{"_index":"nba","_type":"_doc","_id":"2"}}
{"playName":"李四","jerseyNo":"12"}
Elasticsearch是一个实时的分布式搜索引擎,为用户提供搜索服务,当我们决定存储某种数据时,在创建索引的时候需要将数据结构完整确定下来,于此同时索引的设定和很多固定配置将不能改变。当需要改变数据结构时,就需要重新建立索引,为此,Elastic团队提供了很多辅助工具帮助开发人员进行重建索引。
需求:(如修改字段类型,jerseyNo改成keyword类型)
步骤
1 nba取一个别名nba_latest, nba_latest作为对外使用
2 新增一个索引nba_20220101,结构复制于nba索引,根据业务要求修改字段
3 将nba数据同步到nba_20220101
4 给nba_20220101添加别名nba_latest,删除nba别名nba_latest
5 删除nba索引
我们对外提供访问nba索引时使用的是nba_latest别名
步骤1 nba取一个别名nba_latest
POST /_aliases
{
"actions": {
"add": {
"index": "nba",
"alias": "nba_latest"
}
}
}
步骤2 新增一个索引nba_20220101
PUT /nba_20220101
{
"mappings": {
"properties": {
"jerseyNo": {
"type": "keyword"
},
"playName": {
"type": "text"
}
}
}
}
步骤3 将旧索引数据copy到新索引
同步等待,接口将会在 reindex 结束后返回
POST /_reindex
{
"source": {
"index": "nba"
},
"dest": {
"index": "nba_20220101"
}
}
异步执行,如果 reindex 时间过长,建议加上 wait_for_completion=false 的参数条件,
这样 reindex 将直接返回 taskId
POST /_reindex?wait_for_completion=false
{
"source": {
"index": "nba"
},
"dest": {
"index": "nba_20220101"
}
}
步骤4 替换别名
POST /_aliases {
"actions": [{
"add": {
"index": "nba_20220101",
"alias": "nba_latest"
}
},{
"remove": {
"index": "nba",
"alias": "nba_latest"
}
}]
}
步骤5 删除旧索引
DELETE /nba
步骤6 通过别名访问新索引
GET /nba_latest/_doc/1
GET /nba_latest/_doc/2