Jika ini adalah dataset kecil (mis. Rekaman 1K) , Anda dapat dengan mudah menentukan size
:
curl localhost:9200/foo_index/_search?size=1000
The pertandingan semua permintaan tidak diperlukan, karena itu implisit.
Jika Anda memiliki dataset berukuran sedang, seperti catatan 1M , Anda mungkin tidak memiliki cukup memori untuk memuatnya, jadi Anda perlu sebuah gulir .
Gulir seperti kursor dalam DB. Dalam Elasticsearch, ia mengingat di mana Anda tinggalkan dan menjaga tampilan indeks yang sama (yaitu mencegah pencari pergi dengan refresh , mencegah segmen dari penggabungan ).
Dari sisi API, Anda harus menambahkan parameter gulir ke permintaan pertama:
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
Anda mendapatkan kembali halaman pertama dan ID gulir:
{
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
"took" : 0,
...
Ingat bahwa ID gulir yang Anda dapatkan kembali dan batas waktu berlaku untuk halaman berikutnya . Kesalahan umum di sini adalah untuk menentukan batas waktu yang sangat besar (nilaiscroll
), yang akan mencakup untuk memproses seluruh dataset (misalnya catatan 1M) alih-alih satu halaman (misalnya 100 catatan).
Untuk mendapatkan halaman berikutnya, isi ID gulir terakhir dan batas waktu yang akan berlangsung hingga mengambil halaman berikut:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
Jika Anda memiliki banyak ekspor (mis. Dokumen 1B) , Anda ingin memparalelkan. Ini dapat dilakukan melalui scroll yang diiris . Katakanlah Anda ingin mengekspor pada 10 utas. Utas pertama akan mengeluarkan permintaan seperti ini:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
Anda mendapatkan kembali halaman pertama dan ID gulir, persis seperti permintaan gulir normal. Anda akan mengkonsumsinya persis seperti gulungan biasa, kecuali bahwa Anda mendapatkan 1/10 data.
Utas lainnya akan melakukan hal yang sama, kecuali itu id
adalah 1, 2, 3 ...