Elasticsearch 滚动获取数据 Scroll参数

本文介绍了如何使用Elasticsearch的Scroll参数进行数据滚动获取。首先,需要在查询时设置scroll参数,如?scroll=1m,以保持搜索上下文活跃。响应会包含_scroll_id,用于后续滚动API请求获取下一批结果。通过调整size参数控制每次返回的命中数,当hits数组为空时,表示所有数据已获取完毕。最后,可使用_all参数清除所有搜索上下文。
摘要由CSDN通过智能技术生成

声明:本博客根据ES官方文档6.3版本内容翻译总结整理而成,转载请注明出处:https://blog.csdn.net/qingmou_csdn

 

前期准备:创建索引、写入数据

DELETE gaoyh

PUT gaoyh
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "gtest":{
      "properties": {
        "user":{
          "type": "text",
          "fields": {
            "raw":{
              "type": "keyword"
            }
          }
        },
        "interest":{
          "type": "keyword",
          "doc_values":false,
          "norms": false
        },
        "create_time":{
          "type":"date"
        }
      }
    }
  }
}

POST gaoyh/gtest/_bulk
{"index":{"_id":"1"}}
{"u
ES scroll原理是通过在搜索请求中设置scroll参数来实现的。当我们发送一个带有scroll参数的搜索请求时,ES会返回一个scroll_id,该scroll_id可以用于后续的滚动请求。滚动请求会返回与初始搜索请求相同的结果集,但是还会包含一个新的scroll_id,用于获取下一批结果。 具体的原理如下: 1. 发送初始搜索请求,设置scroll参数来指定滚动时间和结果集的保持时间。 2. ES会返回一个scroll_id和第一批结果数据。 3. 使用scroll_id发送滚动请求,ES会返回下一批结果数据和一个新的scroll_id。 4. 重复步骤3,直到没有更多的结果数据返回。 通过使用scroll_id,我们可以在后续的滚动请求中获取到完整的结果集,而不需要重新执行搜索请求。这对于处理大量数据或者需要长时间处理的情况非常有用。 范例: ```python from elasticsearch import Elasticsearch # 创建ES客户端 es = Elasticsearch() # 发送初始搜索请求 search_body = { "query": { "match": { "field": "value" } }, "size": 100, "scroll": "1m" # 设置滚动时间为1分钟 } response = es.search(index="my_index", body=search_body) # 获取第一批结果数据和scroll_id scroll_id = response["_scroll_id"] results = response["hits"]["hits"] # 处理第一批结果数据 for result in results: # 处理结果数据 print(result["_source"]) # 发送滚动请求,获取下一批结果数据 while True: scroll_body = { "scroll": "1m", "scroll_id": scroll_id } response = es.scroll(body=scroll_body) # 获取结果数据和新的scroll_id scroll_id = response["_scroll_id"] results = response["hits"]["hits"] # 处理结果数据 for result in results: # 处理结果数据 print(result["_source"]) # 判断是否还有更多的结果数据 if len(results) == 0: break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值