Backstory:我有一个单节点Elasticsearch集群,它被无意义的数据迅速淹没,达到了2147483519的最大索引大小。
尝试删除无关记录以恢复实例已被证明是困难的。
curl -XDELETE '$HOST:9200/$INDEX/_doc/$ID
返回以下
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "number of documents in the index cannot exceed 2147483519"
}
],
"type": "illegal_argument_exception",
"reason": "number of documents in the index cannot exceed 2147483519"
},
"status": 400
}
有什么方法可以恢复这个索引吗?我还尝试了_delete_by_query
,得到了相同的结果。
ES可以存储的文档数量限制在碎片级别。因此,每个主碎片可以容纳2^31个文档。在您的情况下,可能所有的请求都会在达到限制后被拒绝。目前最好的方法是创建一个具有更多主碎片数量的新索引,并删除旧索引。
同样只是一个建议,检查ES的ILM,如果这有帮助的话。
如果整个索引包含垃圾数据,最好使用删除索引API删除整个索引。
或者,如果为索引配置了每日快照,则可以在开始获取垃圾数据之前恢复索引。
在这种情况下不需要ILM,当您希望根据某些策略和规则而不是一次性情况清理资源时,ILM更有用。