当前位置:
首页
文章
前端
详情

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

加关注,不迷路!

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

环境准备

  • ElasticSearch v6 集群环境

  • ES 第三方包

  1. github.com/olivere/elastic 文档以及测试用例比 go-elasticsearch 丰富

  2. github.com/elastic/go-elasticsearch

本文 olivere/elastic 包进行 es 开发。

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

ElasticSearch 配置读取

编写 conf.ini 配置文件,添加 elasticsearch 集群地址

[ES]

定义 EsConf 结构体

EsConf struct {

在 init 方法中,利用 goconfig 读取 confPath 参数指定的 conf.ini 配置文件路径。

func init() {

在 main 方法中读取 EsAddrs 参数值。

EsConf := &conf.EsConf{

初始化 elasticsearch 客户端实例。

EsClient, err = NewClient()

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

ElasticSearch 游标(Scroll)分页

查询时间需求对应 es 时间格式为:

#开始时间

初始化游标查询,设置游标每次查询 size 大小:5000 条,注意 sort 排序时,必须是 字段 + .keyword,否则查询会报错。

boolQry := elastic.NewBoolQuery()

使用 for 循环读取所有数据,直到 len(res.Hits.Hits) 大小为 0,说明 elasticsearch 查询读取完毕,停止 for 循环。

for {

输出效果:

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

其中使用 Scroll 游标第一次查询会产生 SrcollID 值。

DnF1ZXJ5VGhlbkZldGNoBQAAAAAABDKbFldaYi1nOUhBVF8yZHNfZkJISllSMEEAAAAAAAMrlhZMRWZNdVlNaFFiQ1pjdkFiNHBrMW1BAAAAAAAEMpwWV1piLWc5SEFUXzJkc19mQkhKWVIwQQAAAAAABDKdFldaYi1nOUhBVF8yZHNfZkJISllSMEEAAAAAAAMwQhY4YUFDNVNVNlJsRzc4NFVYRnRyZ2xB

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

往期精彩回顾

1.性能衰减百分之四十,服务网关和数据库还部署在虚拟机上吗?

2.深度剖析 volatile 可见性

3.浅谈 Java 虚拟机内存区

4.利用java多线程技术往Elasticsearch导入亿级数据

Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

Java 技术经理一枚,头条付费专栏《Spring Cloud Alibaba微服务实战match》作者,擅长微服务&分布式、SpringCloud&SpringBoot、工作流。

                      Go 程序利用 ElasticSearch 游标 Scroll 实现海量数据分页查询

后台回复 1024 免费领取微服务、微信小程序、面试等视频资料。

本文分享自微信公众号 - 架构荟萃(dwooola)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。