1 案例背景
將ES索引【my-index】修改為【my-index-v1】,方便添加索引別名
2 操作步驟
- 首先通過PUT請求將舊索引my-index設置為可寫(如果之前設置為不可寫)
PUT /my-index/_settings
{"settings": {"index.blocks.write": "true"}
}
- 通過POST請求創建一個現有索引my-index的精確副本(克隆)
POST /my-index/_clone/my-index-v1
- 通過PUT請求將舊索引my-index設置為不可寫(如果之前設置為不可寫)
PUT /my-index/_settings
{"settings": {"index.blocks.write": "false"}
}
- 使用PUT請求更新索引設置,修改副本分片數(和舊索引副本分片數保持一致)
PUT /my_index-v1/_settings
{"index.number_of_replicas": 2
}
- 使用DELETE請求刪除舊索引
DELETE /my_index
- 通過POST請求給現有索引創建別名
POST /_aliases
{"actions": [{"add": {"index": "my_index-v1","alias": "my_index"}}]
}
3?_reindex和_clone
在Elasticsearch中,_reindex和_clone是兩個用于處理索引數據的API,但它們之間有一些關鍵的區別。
_reindex API允許你從一個或多個索引中檢索、修改(如果需要的話)并重新索引文檔到另一個索引。這是一個非常靈活的操作,因為它允許你在重新索引過程中對數據進行轉換或修改。
你可以通過定義source和dest參數來指定要從哪個索引復制數據,以及將數據復制到哪里。
使用_reindex,你還可以通過script字段在重新索引過程中修改文檔。
由于_reindex會讀取和寫入數據,所以它可能會對集群的性能產生影響,特別是在處理大量數據時。
_clone API是Elasticsearch 7.6.0版本中引入的一個功能,它允許你創建一個現有索引的精確副本(克隆)。
使用_clone時,不需要重新索引整個索引的數據,因為Elasticsearch會直接在內部復制索引的段文件。
由于_clone是基于內部段文件的復制,因此它通常比_reindex更快,尤其是在處理大型索引時。
然而,_clone不提供_reindex中的靈活性,例如修改或轉換文檔的能力。
總結:
_reindex和_clone都可以用于在Elasticsearch中復制索引數據。
_reindex提供了更多的靈活性,允許你在重新索引過程中修改或轉換文檔,但它可能會更慢,特別是在處理大量數據時。
_clone則是創建現有索引的精確副本,速度更快,但不提供修改或轉換文檔的能力。
4 學習筆記
?4.1 刪除索引別名
通過POST請求將現有索引別名刪除
POST /_aliases
{"actions": [{"remove": {"index": "my_index-v1","alias": "my_index"}}]
}
4.2 使用_reindex完成ES索引名稱修改
- 先創建一個新的索引, 依據原有索引的屬性, 這樣可以避免reindex的時候,丟失數據
PUT your_new_index_name
{"mappings": {"properties": {"your_field_name": {"type": "text"}}}
}
- 使用 reindex API 復制數據到新建的索引上
POST _reindex
{"source": {"index": "your_old_index_name"},"dest": {"index": "your_new_index_name"}
}