簡體   English   中英

Elasticsearch掃描和滾動 - 添加到新索引

[英]Elasticsearch scan and scroll - add to new index

Elasticsearch和命令行編程noobie問題。

我在我的計算機上本地設置了elasticsearch,並希望使用掃描和滾動API從使用不同版本的es的服務器中提取文檔,並將它們添加到我的索引中。 我無法弄清楚如何使用批量api來實現這一點。

現在在我的測試階段,我只是使用以下代碼從服務器中提取一些文檔(可行):

   http MY-OLD-ES.com:9200/INDEX/TYPE/_search?size=1000 | jq   .hits.hits[] -c | while read x; do id="`echo "$x" | jq -r ._id`"; index="`echo "$x" | jq -r ._index`"; type="`echo "$x" | jq -r ._type`"; doc="`echo "$x" | jq ._source`"; http put "localhost:9200/junk-$index/$type/$id" <<<"$doc"; done

關於掃描和滾動如何工作的任何提示(noob和有點困惑)。 到目前為止我知道我可以滾動並獲得滾動ID,但我不清楚如何處理滾動ID。 如果我打電話

http get http://MY-OLD-ES.com:9200/my_index/_search?scroll=1m&search_type=scan&size=10

我會收到一個滾動ID。 這可以通過管道傳輸並以相同的方式解析嗎? 另外,我相信我需要一個while循環來告訴它繼續請求。 我該怎么辦呢?

謝謝!

掃描和滾動文檔非常清楚地解釋了它。 獲得scroll_id (一個長的base64編碼的字符串)后,將其與請求的主體一起傳遞。 使用curl,請求看起來像這樣:

curl -XGET 'http://MY-OLD-ES.com:9200/_search/scroll?scroll=1m' -d '
c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0 
NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW
xfaGl0czoxOw==
'

請注意,雖然第一個打開滾動的請求是/my_index/_search ,但第二個讀取數據的請求是/_search/scroll 每次調用它時,傳遞?scroll=1m查詢字符串,它會在滾動自動關閉之前刷新超時。

還有兩件事需要注意:

  1. size您打開滾動時通過適用於每個碎片,所以你會得到size在每個請求索引乘以碎片的數量。
  2. /_search/scroll每個請求都將返回一個新的scroll_id ,您必須在下次調用時傳遞該scroll_id才能獲得下一批結果。 你不能只用相同的scroll_id繼續調用。

當滾動請求中沒有返回命中時,它就完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM