elasticsearch - 在不丢失数据的情况下更新积极使用的索引的配置
问题描述
有时,我需要更新映射、设置或将默认管道绑定到活跃使用的索引。
目前,我使用的数据丢失方法如下:
- 使用适当的映射更新索引模板(或通过 绑定默认管道
index.default_pipeline
); - 创建
a_new_index
(匹配模板index_patterns
); - 重新索引
index_to_fix
toa_new_index
以迁移已索引的数据; - 使用别名将即将到来的索引请求重定向到(别名将与确保索引不受干扰
a_new_index
的名称相同)并删除;index_to_fix
index_to_fix
但是在第 3 步和第 4 步之间,有一个时间间隔,在此期间,新索引的数据会丢失在原始index_to_fix
.
有没有办法在不丢失任何数据的情况下更新积极使用的索引的配置?
解决方案
感谢@LeBigCat 的帮助,经过一些讨论。我认为这个问题可以分三步解决。
为 CRUD 使用别名
首先,尽量不要直接使用索引,尽可能使用别名;由于您不能使用与现有索引同名的别名,因此即使索引已损坏(设计不佳)也无法直接替换该索引。最简单的方法是使用模板并将索引名称直接包含在别名中。
PUT _template/test
{
...
"aliases" : {
"{index}-alias" : {}
}
}
重定向索引
由于index_to_fix
正在积极使用,在更新模板并创建新索引a_new_fix
后,我们可以使用别名将索引重定向到a_new_fix
.
POST /_aliases
{
"actions" : [
{ "add": { "index": "a_new_index", "alias": "index_to_fix-alias" } },
{ "remove": { "index": "index_to_fix", "alias": "index_to_fix-alias" } }
]
}
迁移数据
只需使用_reindex
将所有数据从 迁移index_to_fix
到a_new_index
.
POST _reindex
{
"source": {
"index": "index_to_fix"
},
"dest": {
"index": "index_to_fix-alias"
}
}
推荐阅读
- cuda - 如何减少推力的元组(也返回一个元组)?
- javascript - 问题从 ajax 请求提供 mapbox geojson 数据
- python - 使用 Python 在全屏游戏中获取像素颜色
- javascript - 从目录中异步获取与特定扩展名匹配的所有文件
- javascript - 使用 vue js 进行 Firebase 数据库查询
- autocomplete - 将代码粘贴到 Web UI 时,BigQuery 自动填充功能不起作用
- java - 运行前列出所有参数化测试
- javascript - Vercel (Zeit) 托管服务 - 为 REST 请求阻止 CORS
- html - 如何控制跨浏览器的 IFrame 行为?
- c++ - obj 向量到成员函数