1. 程式人生 > 其它 >elasticsearch es 索引重建

elasticsearch es 索引重建

ElasticSearch索引重建

ElasticSearch索引一旦建立,便不可修改索引欄位型別(允許增加或者刪除該欄位)

例如從Integer型別修改為long型別,這是不被允許的,錯誤資訊如下:

  {
    "error" : {
      "root_cause" : [
        {
          "type" : "illegal_argument_exception",
          "reason" : "mapper [age] cannot be changed from type [integer] to [long]"
        }
      ],
      
"type" : "illegal_argument_exception", "reason" : "mapper [age] cannot be changed from type [integer] to [long]" }, "status" : 400 }

因此,如果專案中有需求需要修改ElasticSearch的索引中欄位的型別,則需要重建索引

以下介紹通過別名_aliase的方式實現不停機的重建ElasticSearch索引

前提:專案中使用的索引的別名,例如索引是index_user ,使用的是別名index_user_latest

索引重建的步驟:

step1: 建立新索引index_user_20210123並初始化對映關係,對映也就是包含了修改後的欄位型別;

step2: 使用 _reindex 將原索引index_user中的資料,匯入到新索引index_user_20210123;

step3: aliases actions修改別名: 將index_user的別名index_user_latest移除,index_user_20210123新增別名index_user_latest

以上便完成了修改欄位型別的資料遷移

備註:

1.舊的索引index_user 可以刪也可以不刪