Я пытаюсь запросить примерно 150 тыс. Документов из ES.Мои 150 тыс. Документов занимают до 9,24 ГБ на диске, и я использую API прокрутки и получаю 10 000 за прокрутку.На его запрос уходит более 5 минут и возникают проблемы с памятью (требуется более 6 ГБ ОЗУ).Сейчас я попробовал несколько подходов:
_source: обычная фильтрация.Из 70 пар ключ-значение на документ мне нужно только 4 поля
{
"size": 10000,
"query": {
"range": {
"updateTime": {
"lte": 10000000000000000
}
}
},
"_source": [
"id.identifierOne",
"id.identifierTwo",
"arrivalTime",
"updateTime"
],
"sort": [
"_doc"
]
}
_stored_field: чтобы не тратить огромные накладные расходы на полный документ, я сохраняю 4 поля при создании индекса
{
"size": 100000,
"stored_fields": [
"updateTime",
"id.identifierOne",
"id.identifierTwo",
"arrivalTime"
],
"query": {
"range": {
"updateTime": {
"lte": 10000000000000000
}
}
},
"sort": [
"_doc"
]
}
Оба работают в одинаковое время.Другая странная вещь, которую я заметил с версией _source, заключается в том, что каждая прокрутка на 10 000 приводит к увеличению времени запроса для следующего пакета и увеличению оперативной памяти.
Я сильно подозреваю, что в моей конфигурации или запросе произошла ошибка.Ожидание нескольких минут кажется слишком долгим.
Моя конфигурация: 5 шардов только на одном узле.Модуль масштабируется до 2CPU с 6 ГБ оперативной памяти.Создание индекса выполняется следующим образом
{
"mappings": {
"doc": {
"dynamic": "false",
"properties": {
"id.identifierOne": {
"type": "long",
"store": true
},
"id.identifierTwo": {
"type": "text",
"store": true
},
"arrivalTime": {
"type": "long",
"store": true
},
"updateTime": {
"type": "long",
"store": true
}
}
},
"settings" : {
"index" : {
"number_of_replicas" : 0
}
}
}
Есть ли возможность сократить время запроса до минуты?
Любая помощь или идеи высоко ценятся.