首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何从Elasticsearch读取极大量的数据

一日一技:如何从Elasticsearch读取极大量的数据

作者头像
青南
发布2019-03-04 17:21:17
3.6K0
发布2019-03-04 17:21:17
举报
文章被收录于专栏:未闻Code未闻Code

在使用Elasticsearch时,如果要返回少量的数据,我们可以在DSL语句中指定size这个参数来设定返回多少条数据:

{
  ...其他查询条件...
  "size": 1000
}

然而,如果你要查询极其大量的数据,例如10亿条,那么这种方式就不实用了。因为在默认情况下, size参数和 from参数之和不能超过10000,即使你修改了Elasticsearch的配置,提高了这个和的上限,也不可能无休止得把它加大。所以在查询极大量数据时,需要使用 scroll关键字来实现。

当我们使用Python + elasticsearch-py来读取Elasticsearch时,可以这样使用scroll:

body = {'你的DSL语句'}
res = es.search(index='index', body=body, scroll='2m')
sid = res['_scroll_id']
scroll_size = len(res['hits']['hits'])
process_hit(res['hits']['hits'])
while scroll_size > 0:
    data = es.scroll(scroll_id=sid, scroll='2m')
    process_hit(data['hits']['hits'])
    sid = data['_scroll_id']
    scroll_size = len(data['hits']['hits'])

其中, process_hit用于处理当前这一批的数据。scroll参数的值 2m表示2分钟。

这种做法的原理,实际上就是每次读取若干条(通过DSL中的 size关键字设定),分多次读取,直到读完为止。后一次读的时候,从前一次返回的 _scroll_id对应的id开始读。这样每一次读取的结果就可以接在一起了。当某一次读取的结果为空时,说明已经把所有数据全部读完了,就可以停止了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档