Küçük bir veri kümesiyse (örneğin, 1K kayıtları) , şunları belirtebilirsiniz size
:
curl localhost:9200/foo_index/_search?size=1000
Maç tüm sorgu o örtülü olduğu gibi, gerekli değildir.
1M kayıtları gibi orta boyutlu bir veri kümeniz varsa varsa, onu yüklemek için yeterli belleğiniz olmayabilir, bu nedenle kaydırma yapmanız gerekir .
Kaydırma, DB'deki imleç gibidir. Elasticsearch'te, kaldığınız yeri hatırlar ve dizinin aynı görünümünü korur (yani, arama yapan kişinin bir yenilemeyle gitmesini önler, segmentlerin birleşmesini önler ).
API olarak, ilk isteğe bir kaydırma parametresi eklemeniz gerekir:
curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'
İlk sayfayı ve kaydırma kimliğini geri alırsınız:
{
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
"took" : 0,
...
Bunu hatırla geri almak kaydırma kimliği ve zaman aşımı hem sonraki sayfada geçerlidir . Buradaki yaygın bir hata, çok büyük bir zaman aşımı (scroll
, tek bir sayfa (örneğin 100 kayıt) yerine tüm veri kümesini (örn. 1M kayıtları) işlemeyi kapsayacak ) .
Sonraki sayfayı almak için, son kaydırma kimliğini ve aşağıdaki sayfayı getirene kadar sürmesi gereken bir zaman aşımını girin:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'
Dışa aktarılacak çok şeyiniz varsa (örneğin 1B belgeleri) , paralel hale getirmek istersiniz. Bu dilimli kaydırma ile yapılabilir . 10 iş parçacığına dışa aktarmak istediğinizi varsayalım. İlk iş parçacığı aşağıdaki gibi bir istek gönderir:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
İlk sayfayı ve kaydırma kimliğini, normal bir kaydırma isteği gibi geri alırsınız. Verilerin 1 / 10'unu almanız dışında, normal bir kaydırma gibi kullanırsınız.
Diğer dişler de aynısını yapar, ancak id
1, 2, 3 ...