分片文档数超限后Elasticsearch Reindex API调用失败求助
解决Elasticsearch分片超文档上限后的重建索引问题
问题核心
原索引单个分片触发Elasticsearch文档数上限(2147483519)导致分片不可用,调用_reindex时因无法访问该分片返回503错误。
可行解决方案(接受少量数据丢失)
1. 确认可用分片ID
执行以下命令查看索引分片状态:
GET _cat/shards/myindex?v
从输出中找到status为STARTED的分片,记录其分片ID(示例:0)。
2. 指定可用分片执行重建索引
修改_reindex请求,仅对可用分片拉取数据,避开不可用分片:
POST _reindex { "conflicts": "proceed", "source": { "index": "myindex", "shard": 0, // 替换为实际查到的可用分片ID "ignore_unavailable": true, "preference": "_primary_first" }, "dest": { "index": "new_myindex" } }
若存在多个可用分片,重复执行该请求并替换对应分片ID即可。
3. 备选方案:手动Scroll查询+批量写入
若_reindex仍报错,可手动拉取可用分片数据后批量写入新索引:
第一步:发起Scroll查询
POST myindex/_search?scroll=10m&shard=0 { "size": 1000, "query": { "match_all": {} } }
记录返回的_scroll_id。
第二步:循环拉取并批量写入
POST _search/scroll { "scroll": "10m", "scroll_id": "替换为上一步获取的scroll_id" }
将查询到的文档整理为Bulk请求格式,写入新索引:
POST _bulk {"index": {"_index": "new_myindex"}} {"字段1": "值1", "字段2": "值2"} {"index": {"_index": "new_myindex"}} {"字段1": "值3", "字段2": "值4"}
重复执行直到Scroll返回空结果。
内容的提问来源于stack exchange,提问作者Kiran Phadatare
相关产品推荐
相关产品推荐

