【问题标题】:Elasticsearch scan and scroll - add to new indexElasticsearch 扫描和滚动 - 添加到新索引
【发布时间】:2015-03-04 00:17:51
【问题描述】:

Elasticsearch 和命令行编程新手问题。

我在我的计算机上本地设置了 elasticsearch,并希望使用 scan 和 scroll api 从使用不同版本 es 的服务器中提取文档并将它们添加到我的索引中。我无法弄清楚如何使用 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

关于扫描和滚动如何工作的任何提示(菜鸟和有点困惑)。到目前为止,我知道我可以滚动并获取滚动 ID,但我不清楚如何处理滚动 ID。 如果我打电话给

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

我会收到一个滚动 ID。这可以用同样的方式输入和解析吗?此外,我相信我需要一个 while 循环来告诉它继续请求。我应该怎么做呢?

谢谢!

【问题讨论】:

    标签: bash http elasticsearch kibana-4


    【解决方案1】:

    scan and scroll 文档解释得很清楚。获得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=http 获取MY-OLD-ES.com:9200/my_index/…;而 $scroll_id;做 $scroll_id = http 'MY-OLD-ES.com:9200/_search/scroll?scroll=1m' -d ' SCROLLIDSTRING '| jq .hits.hits[] -c |同时读取 x;做 id="echo "$x" | jq -r ._id"; index="echo "$x" | jq -r ._index";类型="echo "$x" | jq -r ._type"; doc="echo "$x" | jq ._source"; http put "localhost:9200/junk-$index/$type/$id"
    • 我不会撒谎,bash 脚本对我来说不是一个强项,但我希望这能让你走上正轨 :) 如果它有帮助,如果你将它标记为正确答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2013-05-15
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多