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"] }