elasticsearch es 索引重建
阿新 • • 發佈:2021-09-16
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 可以刪也可以不刪