#elasticsearch
#elasticsearch
Вопрос:
Предыстория: у меня есть кластер 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
с теми же результатами.
Ответ №1:
Ограничение нет. часть документов, которые могут храниться, находится на уровне сегментов. Поэтому каждый первичный сегмент может содержать 2 ^ 31 документ. В вашем случае, вероятно, все запросы отклоняются после достижения предела. Лучший способ в настоящее время — создать новый индекс с большим количеством первичных сегментов и удалить старый индекс.
Также просто предложение, проверьте ILM of ES, если это поможет.
Ответ №2:
если весь ваш индекс содержит данные мусора, лучше удалить весь индекс, используя API удаления индекса.
Или, если у вас настроен ежедневный снимок для вашего индекса, вы можете восстановить индекс до того, как начали получать данные мусора.
ILM для этого случая не требуется, он более полезен, когда вы хотите очистить ресурсы на основе некоторых политик и правил, а не для одноразового использования.