Si se trata de un conjunto de datos pequeño (por ejemplo, registros 1K) , simplemente puede especificar size
:
curl localhost:9200/foo_index/_search?size=1000
La consulta match all no es necesaria, ya que está implícita.
Si tiene un conjunto de datos de tamaño mediano, como registros 1M , es posible que no tenga suficiente memoria para cargarlo, por lo que necesita un desplazamiento .
Un desplazamiento es como un cursor en un DB. En Elasticsearch, recuerda dónde lo dejó y mantiene la misma vista del índice (es decir, evita que el buscador se vaya con una actualización , evita que los segmentos se fusionen ).
En cuanto a la API, debe agregar un parámetro de desplazamiento a la primera solicitud:
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
Vuelve a la primera página y una ID de desplazamiento:
{
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
"took" : 0,
...
Recuerde que tanto la ID de desplazamiento que obtiene como el tiempo de espera son válidos para la página siguiente . Un error común aquí es especificar un tiempo de espera muy grande (valor de scroll
), que cubriría el procesamiento de todo el conjunto de datos (por ejemplo, registros 1M) en lugar de una página (por ejemplo, 100 registros).
Para obtener la siguiente página, complete la última ID de desplazamiento y un tiempo de espera que debería durar hasta obtener la siguiente página:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
Si tiene mucho que exportar (p. Ej., Documentos 1B) , querrá paralelizar. Esto se puede hacer a través de desplazamiento en rodajas . Digamos que desea exportar en 10 hilos. El primer hilo emitiría una solicitud como esta:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
Vuelve a la primera página y una ID de desplazamiento, exactamente como una solicitud de desplazamiento normal. Lo consumirías exactamente como un desplazamiento regular, excepto que obtienes 1/10 de los datos.
Otros hilos harían lo mismo, excepto que id
serían 1, 2, 3 ...