Wenn es sich um einen kleinen Datensatz handelt (z. B. 1K Datensätze) können Sie einfach angeben size
:
curl localhost:9200/foo_index/_search?size=1000
Le site alle Abfragen abgleichen ist nicht erforderlich, da sie implizit ist.
Wenn Sie einen mittelgroßen Datensatz haben, etwa 1 Million Datensätze haben Sie möglicherweise nicht genug Speicherplatz, um sie zu laden, so dass Sie eine Blättern Sie .
Eine Schriftrolle ist wie ein Cursor in einer DB. In Elasticsearch merkt er sich, wo man aufgehört hat und behält die gleiche Ansicht des Indexes bei (d.h. er verhindert, dass der Suchende mit einem aktualisieren verhindert Segmente aus der Verschmelzung ).
API-mäßig müssen Sie der ersten Anfrage einen Scroll-Parameter hinzufügen:
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
Sie erhalten die erste Seite und eine Bildlauf-ID zurück:
{
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
"took" : 0,
...
Denken Sie daran, dass sowohl die zurückgegebene Bildlauf-ID als auch die Zeitüberschreitung gelten für die nächste Seite . Ein häufiger Fehler ist hier die Angabe eines sehr großen Timeouts (Wert von scroll
), die für die Verarbeitung des gesamten Datensatzes (z. B. 1 Mio. Datensätze) anstelle einer Seite (z. B. 100 Datensätze) ausreichen würde.
Um die nächste Seite zu erhalten, geben Sie die letzte Bildlauf-ID und eine Zeitüberschreitung ein, die bis zum Abruf der nächsten Seite dauern soll:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
Wenn Sie viel zu exportieren haben (z. B. 1B Dokumente) werden Sie parallelisieren wollen. Dies kann geschehen über geschnittene Schnecke . Angenommen, Sie möchten in 10 Threads exportieren. Der erste Thread würde eine Anfrage wie diese stellen:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
Sie erhalten die erste Seite und eine Bildlauf-ID zurück, genau wie bei einer normalen Bildlaufanforderung. Sie verbrauchen es genau wie einen normalen Bildlauf, außer dass Sie nur 1/10 der Daten erhalten.
Andere Themen würden dasselbe tun, außer dass id
wäre 1, 2, 3...