Если это небольшой набор данных (например, 1K записей) , вы можете просто указать size
:
curl localhost:9200/foo_index/_search?size=1000
Матч всех запросов не требуется, так как это подразумевается.
Если у вас есть набор данных среднего размера, например, 1M записей , у вас может не хватить памяти для его загрузки, поэтому вам нужна прокрутка .
Свиток похож на курсор в БД. В Elasticsearch он запоминает, где вы остановились, и сохраняет то же представление индекса (то есть предотвращает уход поисковика с обновлением , предотвращает слияние сегментов ).
По API, вы должны добавить параметр прокрутки к первому запросу:
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
Вы вернетесь на первую страницу и прокрутите ID:
{
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
"took" : 0,
...
Помните, что и идентификатор прокрутки, который вы получаете, и время ожидания действительны для следующей страницы . Распространенной ошибкой здесь является указание очень большого тайм-аута (значения scroll
), которое будет охватывать обработку всего набора данных (например, 1М записей) вместо одной страницы (например, 100 записей).
Чтобы перейти на следующую страницу, введите последний идентификатор прокрутки и время ожидания, которое должно длиться до получения следующей страницы:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
Если у вас есть много для экспорта (например, документы 1B) , вы хотите распараллелить. Это можно сделать с помощью нарезанного свитка . Скажем, вы хотите экспортировать в 10 потоков. Первый поток выдаст такой запрос:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
Вы получаете первую страницу и идентификатор прокрутки, точно так же, как обычный запрос прокрутки. Вы будете использовать его точно так же, как обычный свиток, за исключением того, что вы получите 1/10 данных.
Другие темы будут делать то же самое, за исключением того, id
что будет 1, 2, 3 ...