Как восстановить пространство после массового обновления в ElasticSearch? - PullRequest
0 голосов
/ 10 октября 2018

У нас есть индекс около 20 ГБ;документы имеют несколько больших полей, многие из которых теперь являются избыточными.

Поэтому я решил использовать массовое обновление, чтобы оставить эти поля пустыми в ожидании восстановления места на сервере.

Я протестировал небольшое количество экземпляров, используя код вида:

POST myindex/doc/_bulk
{"update":{"_id":"ccp-23-1002"}}
{"doc" : { "long_text_1":"", "long_text_2":""}}
{"update":{"_id":"ccp-28-1007"}}
{"doc" : { "long_text_1":"", "long_text_2":""}}

Это работало нормально, я выполнил поиск, они показали, что поля long_text_1 и long_text_2 теперь были пустыми в указанных документах, остальные полябез изменений.

Итак, я написал что-то для запуска вышеприведенного документа по всем документам в индексе, по 1000 за раз.После того, как некоторые из них прошли, я проверил данные в консоли, используя

GET _cat/indices?v&s=store.size&h=index,docs.count,store.size

..., который показал, что, хотя в рассматриваемом индексе было одинаковое количество документов, store.size стал больше,не меньше!

Предположительно, происходит то, что в каждом случае после обновления создается новый документ с теми же данными, что и у старого документа, за исключением измененных полей, указанных в запросе на обновление;и старый документ все еще сидит в указателе, предположительно помеченный как мертвый, но занимающий место.Таким образом, упражнение имеет совершенно противоположное предполагаемому эффекту.

Поэтому мой вопрос состоит в том, как поручить ES сжать указатель или иным образом исправить это мертвое пространство?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...