Elasticsearch 滚动查询请求

在Elasticsearch中,一次查询只能得到一次独立的结果,在分页中这是很不方便的。当用Elasticsearch进行第n页查询的时候,Elasticsearch在内部查询了从开始到n页的所有数据,只是在返回的时候抛弃了前面n-1页的内容。这样对查询大量数据的时候是非常不方便的。但Elasticsearch提供了滚动API来解决此问题

 

为了使用scroll,在第一次搜索请求的查询中指定scroll参数,它告诉Elasticsearch需要保持搜索的上下文多长时间。例如:

复制代码
GET http://x:9200/20001_event/_search?scroll=1m&pretty=
Body 类型 : application/json
{
  "size": 20,
  "query": {
    "match": {
      "person_id": "6042"
    }
  },
  "sort": [
    "_doc"
  ]
}
复制代码

保持时间的参数如下所示:□y——年□M——月□w——周□d——天□h——小时□m——分钟□s——秒

返回值中包含一个scroll_id,可将这个ID传递给scroll API来搜索下一个批次的内容。在下一次查询中的实例如下。

GET http://x:9200/_search/scroll?pretty=
Body 类型 : application/json
{
  "scroll" : "1m", 
  "scroll_id" : "xxx"
}

每一次调用scroll查询返回下一批的结果,直到返回为空("hits":[]),表示查询完成。

 

scroll参数告诉Elasticsearch应保持多长时间的搜索。这个值并不需要长到可以处理所有的数据,只要够处理前一批次结果的时间。每一个滚动请求设置一个新的有效时间。

当滚动超时的时候会自动删除搜索上下文,然而保持滚动打开会产生成本,所以当scroll不再被使用的时候需要显式地清除滚动接口。方法如下。

DELETE http://x:9200/_search/scroll
Body 类型 : application/json
{
    "scroll_id": ["xxx"]
}

 

posted @   草木物语  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示