scoll滚动搜索

scoll滚动搜索

eg : 如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完

使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来
scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的
采用基于_doc进行排序的方式,性能较高
每次发送scroll请求,我们还需要指定一个scoll参数,指定一个时间窗口,每次搜索请求只要在这个时间窗口内能完成就可以了

GET /test_index/test_type/_search?scroll=1m
{
“query”: {
​ “match_all”: {}
},
“sort”: [ “_doc” ],
“size”: 3
}

结果示例:

{
“_scroll_id”: “DnF1ZXJ5VGhlbkZldGNoBQAAAAAAACxeFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYBY0b25zVFlWWlRqR3ZJajlfc3BXejJ3AAAAAAAALF8WNG9uc1RZVlpUakd2SWo5X3NwV3oydwAAAAAAACxhFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYhY0b25zVFlWWlRqR3ZJajlfc3BXejJ3”,
“took”: 5,
“timed_out”: false,
“_shards”: {
​ “total”: 5,
​ “successful”: 5,
​ “failed”: 0
},
“hits”: {
​ “total”: 10,
​ “max_score”: null,
​ “hits”: [
​ {
​ “_index”: “test_index”,
​ “_type”: “test_type”,
​ “_id”: “8”,
​ “_score”: null,
​ “_source”: {
​ “test_field”: “test client 2”
​ },
​ “sort”: [
​ 0
​ ]
​ },
​ {
​ “_index”: “test_index”,
​ “_type”: “test_type”,
​ “_id”: “6”,
​ “_score”: null,
​ “_source”: {
​ “test_field”: “tes test”
​ },
​ “sort”: [
​ 0
​ ]
​ },
​ {
​ “_index”: “test_index”,
​ “_type”: “test_type”,
​ “_id”: “AVp4RN0bhjxldOOnBxaE”,
​ “_score”: null,
​ “_source”: {
​ “test_content”: “my test”
​ },
​ “sort”: [
​ 0
​ ]
​ }
​ ]
}
}

获得的结果会有一个scoll_id,下一次再发送scoll请求的时候,必须带上上一个的scoll_id

GET /_search/scroll
{
​ “scroll”: “1m”,
​ “scroll_id” : “DnF1ZXJ5VGhlbkZldGNoBQAAAAAAACxeFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYBY0b25zVFlWWlRqR3ZJajlfc3BXejJ3AAAAAAAALF8WNG9uc1RZVlpUakd2SWo5X3NwV3oydwAAAAAAACxhFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYhY0b25zVFlWWlRqR3ZJajlfc3BXejJ3”
}

11,4,7
3,2,1
20

scoll,看起来挺像分页的,但是其实使用场景不一样。分页主要是用来一页一页搜索,给用户看的;scoll主要是用来一批一批检索数据,让系统进行处理的

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2020 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信