Как с помощью Elasticsearch получить более 1 000 000 записей?

Добрый день!

В каталоге Elasticsearch хранятся более 1 млн. товаров. Я вытягиваю id товаров из эластика, если вытягивать ±10 000 товаров, то нормально, но к примеру если вытягивать большее количество, то уже соответственно съедается оперативная память.

Есть ли способ вытянуть 1 млн. товаров блоками, например по 1 000 на 10 блоков. Тоесть берем записи блока, проводим процедуры над ним, чистим в памяти и переходим к следующему блоку и т.д.?
  • Вопрос задан
  • 848 просмотров
Решения вопроса 1
kruslan
@kruslan
В чём именно проблема? Алгоритм простой-же:

1. lastId = null
2. query = [] // получаем все записи
3. Если null != lastId - в query добавляем условие: id > lastId
4. Получаем n записей с сортировкой по id
5. Обрабатываем полученное
6. В lastId закидываем id последней полученной записи
7. Если получено больше 0 записей - повторяем с п.3
8. Профит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Flying
Выбирать произвольное количество результатов из Elasticsearch можно с использованием scroll API.

Это более-менее аналог курсоров в базах данных. Таким образом вы, определяя размеры окна и время жизни токена можете подстроить выборку под свои задачи.

У меня в проекте приходилось итерировать через scroll и больше миллиона документов - нормально работает.
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Для начала запомнить что эластик самая прожорливая тварь на этом свете по ресурсам. Потом вспомнить что эластик это поисковый индекс, а не база данных и доставать из него больше десятка(условно) записей считается преступлением. Потом узнаем что у эластика есть лимиты на максимальную длину индекса для одного запроса и он настраивается (читать про индексы). Перестать это делать по тому что там все-равно есть аппаратные лимиты
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
PeoplePass Москва
от 150 000 до 250 000 руб.
TalentTech Москва
от 200 000 до 300 000 руб.
ManyChat Москва
от 180 000 до 250 000 руб.
06 дек. 2019, в 09:02
30000 руб./за проект
06 дек. 2019, в 08:55
5000 руб./за проект
06 дек. 2019, в 01:32
10000 руб./за проект