从完整的弹性搜索索引中删除文档



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更有用。

最新更新