Elasticsearch: как освободить размер магазина после удаления документов
На моем сервере elasticsearch:
Всего документов: 3 миллиона, общий размер: 3,6G
Затем я удаляю около 2,8 миллиона документов:
общие документы: около 0,13 миллиона, общий размер: 3,6G
Я удалил документы, как мне освободить размер документов?
Ответы
Ответ 1
При удалении документов они помечаются только как удаленные, поэтому их не нужно искать. Чтобы освободить место на диске, вы должны оптимизировать индекс:
curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true'
документация: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html
Документация перемещена по адресу: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html.
Обновить
Начиная с Elasticsearch 2.1.x, optimize
устарела в пользу forcemerge
. API такой же, только конечная точка изменилась.
curl -XPOST 'http://localhost:9200/_forcemerge?only_expunge_deletes=true'
Ответ 2
В текущей версии эластичного поиска (5.4)
-
Для оптимизации всех показателей:
POST/_all/_forcemerge?only_expunge_deletes=true
-
Оптимизировать единый индекс
POST/twitter/_forcemerge?only_expunge_deletes=true
, где twitter является индексом
Ссылка: https://www.elastic.co/guide/en/elasticsearch/reference/5.4/indices-forcemerge.html#indices-forcemerge
Ответ 3
Кнутуолкер ответ правильный. Однако если вы используете AWS ElasticSearch и хотите освободить место для хранения, это не будет работать.
На AWS индекс для подделки должен быть указан в URL. Он может включать в себя подстановочные знаки, как это обычно происходит с ротацией индексов.
curl -XPOST 'https://something.es.amazonaws.com/index-*/_forcemerge?only_expunge_deletes=true'
AWS публикует список отличий API ElasticSearch.
Ответ 4
Замените индексное имя своим. Это сразу освободит место
curl -XPOST 'http://localhost:9200/indexname/_forcemerge' -d
'{"only_expunge_deletes": false, "max_num_segments": 1 }'