elasticsearch查询之大数据集分页查询 (2)

elasticsearch提供的scroll可以实现一个请求返回所有命中记录,我们可以使用类似关系数据库中的游标的方式来获取命中的记录; scroll并不是为了实现实时的搜索请求,更多的是为了处理大量的数据,尤其适合从某一个index进行重新索引;

为了使用scroll,我们需要在url里通过scroll指定elasticsearch需要保留搜索结果的时间;

GET my_store_index/_search?scroll=1m { "_source": false, "query": { "match": { "name": "bj" } }, "size": 2 } { "_scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAb0Fk9Ca1RwWmNUUUoyNWttbE5aNnh5TGcAAAAAAAAG8xZPQmtUcFpjVFFKMjVrbWxOWjZ4eUxnAAAAAAAABvUWT0JrVHBaY1RRSjI1a21sTlo2eHlMZwAAAAAAAAb2Fk9Ca1RwWmNUUUoyNWttbE5aNnh5TGcAAAAAAAAG9xZPQmtUcFpjVFFKMjVrbWxOWjZ4eUxn", "took" : 2, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 25, "max_score" : 3.5134304, "hits" : [ ] } }

我们使用上边请求返回的_scroll_id来获取下一页的数据;

GET _search/scroll { "scroll" : "1m", "scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAdlFk9Ca1RwWmNUUUoyNWttbE5aNnh5TGcAAAAAAAAHZhZPQmtUcFpjVFFKMjVrbWxOWjZ4eUxnAAAAAAAAB2cWT0JrVHBaY1RRSjI1a21sTlo2eHlMZwAAAAAAAAdoFk9Ca1RwWmNUUUoyNWttbE5aNnh5TGcAAAAAAAAHaRZPQmtUcFpjVFFKMjVrbWxOWjZ4eUxn" }

此种分页方式的特点

首次查询通过query string参数指定scroll的时间,elasticsearch会自动生成一个scroll并返回对应的id;

此查询是一种有状态的查询,不会实时响应索引变化;

每次请求返回的记录数通过首次请求设置的size参数控制;

返回scroll对应的全部记录之后再查询就返回空数组;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjzjg.html