
智能定价API:如何让企业定价策略更精准?
如果你已经使用 Elasticsearch 一段时间,可能会遇到需要重新索引数据的情况。无论是修改映射、升级版本,还是重组文档,这些场景都需要用到 Reindex API。本指南将全面介绍 Reindex API 的功能、使用方法、常见用例、性能优化技巧以及可能遇到的陷阱。
Elasticsearch Reindex API 是一个强大工具,用于将文档从一个索引复制到另一个索引。与简单备份和还原不同,它支持:
工作原理:从源索引读取文档 → 写入目标索引。
⚠️ 注意:重新索引不会修改源索引,而是创建一个新的数据副本,以便在迁移完成前进行调整。
修改索引映射
更新字段类型或分析器时,通常需要创建新索引并迁移数据。
Elasticsearch 版本升级
主要版本升级可能引入破坏性更改,要求重新索引以适配新版本。
转换现有数据
在存储到新索引之前,可对文档进行修改,如重命名字段或调整数据格式。
拆分或合并索引
数据重组时,重新索引可将文档正确分配到新索引。
POST _reindex
{
"source": { "index": "old_index" },
"dest": { "index": "new_index" }
}
将
old_index
的所有文档复制到new_index
,不做修改。
仅迁移状态为 active
的文档:
POST _reindex
{
"source": {
"index": "old_index",
"query": { "term": { "status": "active" } }
},
"dest": { "index": "new_index" }
}
添加时间戳字段:
POST _reindex
{
"source": { "index": "old_index" },
"dest": { "index": "new_index" },
"script": {
"source": "ctx._source['timestamp'] = params.timestamp",
"params": { "timestamp": "2023-10-01T00:00:00" }
}
}
脚本还可用于重命名、修改或删除字段。
将任务切分为多个 slice 并行运行:
POST _reindex
{
"source": { "index": "old_index", "slice": { "id": 0, "max": 5 } },
"dest": { "index": "new_index" }
}
重复操作,将
id
从 0 到 4 设置,实现并行。
避免单次请求过多文档:
POST _reindex
{
"source": { "index": "old_index", "size": 1000 },
"dest": { "index": "new_index" }
}
POST _reindex?requests_per_second=500
GET _tasks?actions=*reindex
PUT old_index/_settings
{ "index.blocks.write": true }
PUT new_index
{
"mappings": {
"properties": { "field_name": { "type": "keyword" } }
}
}
GET _cluster/health
GET _cat/allocation?v
PUT old_index/_settings
{ "index.blocks.write": false }
POST _reindex
{
"source": { "index": "old_index" },
"dest": { "index": "new_index" },
"script": { "source": "ctx._source['field_name'] = ctx._source['field_name'].toLowerCase()" }
}
POST _reindex
{
"source": { "index": "old_index" },
"dest": { "index": "new_index" },
"script": { "source": "ctx._source.remove('conflicting_field')" }
}
问题 | 解决方法 |
---|---|
操作超时 | 增加 timeout=10m ,使用切片并行,减小批处理大小 |
映射冲突 | 确保目标索引映射兼容,必要时使用脚本转换 |
文档缺失 | 检查查询过滤器和批量请求失败情况 |
磁盘空间不足 | 清理旧索引,启用压缩:index.codec: best_compression |
集群性能问题 | 限制请求速率,在非高峰时段执行 |
重新索引是 Elasticsearch 生产环境 中不可避免的操作。通过:
你可以确保重新索引操作 高效、安全,避免常见陷阱。在将更改应用到实时数据前,强烈建议在 测试环境 验证。