Как с помощью Elasticsearch получить более 1 000 000 записей?
Добрый день!
В каталоге Elasticsearch хранятся более 1 млн. товаров. Я вытягиваю id товаров из эластика, если вытягивать ±10 000 товаров, то нормально, но к примеру если вытягивать большее количество, то уже соответственно съедается оперативная память.
Есть ли способ вытянуть 1 млн. товаров блоками, например по 1 000 на 10 блоков. Тоесть берем записи блока, проводим процедуры над ним, чистим в памяти и переходим к следующему блоку и т.д.?
Выбирать произвольное количество результатов из Elasticsearch можно с использованием scroll API.
Это более-менее аналог курсоров в базах данных. Таким образом вы, определяя размеры окна и время жизни токена можете подстроить выборку под свои задачи.
У меня в проекте приходилось итерировать через scroll и больше миллиона документов - нормально работает.
Для начала запомнить что эластик самая прожорливая тварь на этом свете по ресурсам. Потом вспомнить что эластик это поисковый индекс, а не база данных и доставать из него больше десятка(условно) записей считается преступлением. Потом узнаем что у эластика есть лимиты на максимальную длину индекса для одного запроса и он настраивается (читать про индексы). Перестать это делать по тому что там все-равно есть аппаратные лимиты
Перестать не могу это делать, так как изначально концепция сайта была не мной написана, а в индексе эластика лежит уже почти 3 млн. товаров. Нужно обойти все товары в индексе и проверить на наличие в базе данных, если отсутствует помечать как отсутствующий. Вообщем что-то надо с этим делать.