python 用scroll查询大量es数据

系统 2968 0

游标查询

          
            scroll查询,可以用于对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。
scroll查询可以分为以下两个步骤。


          
        

启动游标查询

          
            GET /host/_search?scroll=1m
          
        

其中的 scroll=1m 表示游标查询窗口保持1分钟,如果一次取的数据量大可以设置为一个大一些的时间。
返回的字段中包含一个 scroll_id , 接下来用这个字段可以获取后续值。

循环获取

循环获取余下的值

          
            GET /_search/scroll
{
    "scroll": "1m", 
    "scroll_id" : scroll_id
}
          
        

通过上一步得到的 scroll_id ,获取余下的值。

完整代码

用Python获取所有数据的完整代码如下

          
            def get_all_es_data(url):
    # 过滤的query
    query = {}
    data = []
    # 每次取的数据量
    size = 10000
    scroll_id = None
    try:
        while size == 10000:
            if not scroll_id:
                query["size"] = 10000
                curr_url = url + '/_search?scroll=8m'
                response = requests.post(curr_url, json.dumps(query), headers={'content-type': 'application/json'})
            else:
                curr_url = url + '_search/scroll?scroll=8m&scroll_id=' + scroll_id
                response = requests.get(curr_url)
            if response:
                response = json.loads(response.text)
                scroll_id = response['_scroll_id']
                response_data = [doc["_source"] for doc in response['hits']['hits']]
                data.extend(response_data)
    except Exception as err:
        pass
          
        

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论