-
scroll搜索
1 发送scroll请求 GET accounts/person/_search?scroll=1m { "query": { "match_all": {} }, "size": 2, "sort": ["_doc"] } 会返回一个_scroll_id 2 使用_scroll_id查询第二轮结果 GET _search/scroll { "scroll":"1m", "scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAA-XFnBWaThOMmhTVDV5aFFKZ3dwWWxzaWcAAAAAAAAPkxZwVmk4TjJoU1Q1eWhRSmd3cFlsc2lnAAAAAAAAD5QWcFZpOE4yaFNUNXloUUpnd3BZbHNpZwAAAAAAAA-VFnBWaThOMmhTVDV5aFFKZ3dwWWxzaWcAAAAAAAAPlhZwVmk4TjJoU1Q1eWhRSmd3cFlsc2ln" } 返回: { "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAA-8FnBWaThOMmhTVDV5aFFKZ3dwWWxzaWcAAAAAAAAPvRZwVmk4TjJoU1Q1eWhRSmd3cFlsc2lnAAAAAAAAD8AWcFZpOE4yaFNUNXloUUpnd3BZbHNpZwAAAAAAAA--FnBWaThOMmhTVDV5aFFKZ3dwWWxzaWcAAAAAAAAPvxZwVmk4TjJoU1Q1eWhRSmd3cFlsc2ln", "took": 1, "timed_out": false, "terminated_early": true, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 3, "max_score": null, "hits": [ { "_index": "accounts", "_type": "person", "_id": "3", "_score": null, "_source": { "name": "jim jack", "age": 22, "joinDate": "2020-03-03", "desc": "jim is a good boy!" }, "sort": [ 0 ] } ] } } 如果还有数据,者使用返回的_scroll_id进行下一轮搜索即可
scroll搜索会在第一次搜索的时候保存一个当时的视图快照,之后只会基于该旧的快照提供搜索,如果这个期间数据变更,是不会让用户看到的(搜索不到)。此搜索性能较高。
每次发送scroll请求需要指定scoll参数,意思是时间窗口,只要在这个时间窗口内完成搜索请求就可以了,超时会报错。
scoll搜索和分页有些类似,一般会用在程序处理数据场景里,因为有超时设置,所以不适合做分页
-
scroll+alias别名实现生产环境上零停机切换索引
1 给生产环境客户端使用别名连接es
1 PUT old_goods/_alias/goods 返回: { "acknowledged": true } 2 客户端连接测试 GET goods/book/1 返回 { "_index": "old_goods", "_type": "book", "_id": "1", "_version": 1, "found": true, "_source": { "name": "good book" } }
2 建立新索引:使用scroll方式查询出old_goods的旧数据,然后使用bluk api的index写入到新索引中。
3 把别名从旧索引删除,然后把些别名赋给新索引
POST _aliases { "actions":[ {"remove":{"index":"old_goods","alias":"goods"}}, {"add":{"index":"new_goods","alias":"goods"}} ] }