Go ElasticSearch 游标查询Scroll

scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询。游标查询会取某个时间点的快照数据。 查询初始化之后索引上的任何变化会被它忽略。 它通过保存旧的数据文件来实现这个特性,结果就像保留初始化时的索引视图一样。

Go olivere elastic基础:golang中使用elasticsearch之olivere elastic汇总

环境

Go mod包:

github.com/olivere/elastic/v7

Elasticsearch版本:v7

游标查询
do, err := client.Scroll().		// 游标滚动查询
		Index(IndexName).
		Query(condition.Query()).
		Scroll("1m").			// 保持游标查询窗口一分钟
		Size(10).
		Do(context.Background())
if err !=nil {
		panic(err)
}
scrollId := do.ScrollId
fmt.Println(scrollId)			// 生成当次的游标ID
fmt.Println(do.Hits.Hits)		// 第一部分数据
滚动游标数据
for {
	result, _ := dao.es.Scroll("1m").
    	ScrollId(scrollId).				//通过游标id查询
    	Do(context.Background())
	if len(result.Hits.Hits) <= 0 { 	// 跳出循环滚动
		break
	}
	fmt.Println(result.Hits.Hits)		// 游标滚动数据
}
作用
  • 处理大批量的文档查询
  • 游标分页查询
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
scroll是一种在ES中执行分页查询的方法,它使用游标来迭代查询结果,而不是像传统的基于页码的分页查询那样,每次查询都会重新计算结果。 使用scroll方法进行分页查询的一般步骤如下: 1. 执行一次初始查询,包括查询条件、排序方式、需要返回的字段等信息。 2. 在查询结果中获取一个scroll_id,该id用于后续的游标查询。 3. 使用scroll_id执行下一次查询,指定需要返回的文档数量和scroll_id,直到查询结果为空。 以下是一个使用scroll进行分页查询的示例: ``` POST /my_index/_search?scroll=1m { "size": 10, "query": { "match": { "title": "foo" } } } // 初始查询结果 { "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAADwFgFvMnNzYU5mYUgzQXV6QTl4Q2N4Z0EAAAAPABbhbzJzc2FOZmFIM0F1ekE5eENjeGdBAADAAVpuG8tzc2FOZmFIM0F1ekE5eENjeGdBAADAAVp0G8t", "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 100, "relation": "eq" }, "max_score": 0.2876821, "hits": [ { "_index": "my_index", "_type": "_doc", "_id": "1", "_score": 0.2876821, "_source": { "title": "foo", "body": "bar" } }, ... ] } } // 使用scroll_id执行下一次查询 POST /_search/scroll { "scroll": "1m", "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAADwFgFvMnNzYU5mYUgzQXV6QTl4Q2N4Z0EAAAAPABbhbzJzc2FOZmFIM0F1ekE5eENjeGdBAADAAVpuG8tzc2FOZmFIM0F1ekE5eENjeGdBAADAAVp0G8t" } // 下一次查询结果 { "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAADwFgFvMnNzYU5mYUgzQXV6QTl4Q2N4Z0EAAAAPABbhbzJzc2FOZmFIM0F1ekE5eENjeGdBAADAAVpuG8tzc2FOZmFIM0F1ekE5eENjeGdBAADAAVp0G8t", "took": 1, "timed_out": false, "hits": { "total": { "value": 100, "relation": "eq" }, "max_score": 0.2876821, "hits": [ { "_index": "my_index", "_type": "_doc", "_id": "11", "_score": 0.2876821, "_source": { "title": "foo", "body": "bar" } }, ... ] } } ``` 需要注意的是,scroll_id在每次查询时都会返回,因此在执行后续查询时需要将上一次查询结果中的scroll_id传递给下一次查询。另外,scroll参数用于指定scroll_id的有效时间,如果一个scroll_id在该时间内没有被使用,则会被ES自动清除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值