ElasticSearch使用别名进行索引数据迁移

ElasticSearch 版本为 7.8.1。
Kibana 版本为 7.8.1。
这些命令都是在Kibana下的控制台进行测试的。
关于ElasticSearch集群的搭建和Kibana的使用可以看我的其他文章。

1、动态创建索引my_68_idx并添加数据

PUT /my_68_idx/_doc/1
{
     
  "title":"2020-09-01"
}

添加日期字符串

2、再次添加一条数据

PUT /my_68_idx/_doc/1
{
     
  "title":"this is a string"
}

嗯,竟然报错了。

2.1、图解

ElasticSearch使用别名进行索引数据迁移_第1张图片

什么鬼,类型错误。

3、查看这个索引给动态生成的类型

GET /my_68_idx/_mapping

3.1、图解

ElasticSearch使用别名进行索引数据迁移_第2张图片

发现动态生成的类型是date类型,但是我们实际想要生成text类型。

4、尝试修改title类型

PUT /my_68_idx/_mapping
{
     
  "properties": {
     
    "title": {
     
      "type": "text"
    }
  }
}

4.1、图解

ElasticSearch使用别名进行索引数据迁移_第3张图片

咿,类型合并失败,这条路走不通了。试试别名吧

5、给这个索引起个别名

PUT /my_68_idx/_alias/useful_idx

6、测试这个别名是否可用

GET /useful_idx/_doc/1

6.1、图解

ElasticSearch使用别名进行索引数据迁移_第4张图片

亲测,可用,别名可以的。

7、新创建一个新的索引

PUT /my_68_idx_new
{
     
  "mappings": {
     
    "properties": {
     
      "title":{
     
        "type": "text"
      }
    }
  }
}

8、查询my_68_idx索引的数据

GET /my_68_idx/_search?scroll=1s
{
     
  "query": {
     
    "match_all": {
     }
  },
  "sort": ["_doc"],
  "size": 1
}

因为只有一条数据,所以size为1,如果有多条数据可以多查询几次,每次的size设置稍微大一点。

8.1、图解

ElasticSearch使用别名进行索引数据迁移_第5张图片

9、将上面批量查询的数据添加到新的索引中

POST /_bulk
{
     "index":{
     "_index":"my_68_idx_new","_id":"1"}}
{
     "title" : "2020-09-01"}

批量操作,把步骤8查询到的数据,在这里批量插入新的my_68_idx_new中。

10、查询是否添加成功

GET /my_68_idx_new/_doc/1

10.1、图解

ElasticSearch使用别名进行索引数据迁移_第6张图片

11、修改别名将my_68_idx这个索引对应的别名转换到my_68_idx_new上

POST /_aliases
{
     
  "actions": [
    {
     
      "add": {
     
        "index": "my_68_idx_new",
        "alias": "useful_idx"
      }
    },
    {
     
      "remove": {
     
        "index": "my_68_idx",
        "alias": "useful_idx"
      }
    }
  ]
}

12、别名查询数据发现使用的是新的索引

GET /useful_idx/_doc/1

12.1、图解

ElasticSearch使用别名进行索引数据迁移_第7张图片

你可能感兴趣的:(elasticsearch,es别名使用,es不停机迁移索引)