search_after
搜索的时候指定一个不重复的字段进行排序,将返回的不重复的字段的值作为seach_after的值请求
优点是:避免深度分页的性能问题,可以实时获取下一页文档信息
- 不支持指定页数,之可以一业一业的往下翻页
搜索指定sort,并且保证值是唯一的,可以通过加入_id 保证唯一性
使用上一次最后一个文档的sort值 进行查询
POST users/_doc
{"name":"user1","age":10}
POST users/_doc
{"name":"user2","age":20}
POST users/_doc
{"name":"user3","age":30}
POST users/_search
{
"size": 1,
"query": {
"match_all": {}
},
"sort": [
{"_id":"asc"}
]
}
POST users/_search
{
"size": 1,
"query": {
"match_all": {}
},
"search_after":[
"5K21AG4Btbn56kNQpBIJ"
],
"sort": [
{"_id":"asc"}
]
}
scroll
创建一个快照,但是有新的数据写入之后,无法被查到,因为scroll是把数据创建一个快照,新写入的数据,不在快照中,所以无法被查询到。
POST users/_search?scroll=5m
{
"size": 1,
"query": {
"match_all": {}
}
}
POST _search/scroll
{
"scroll":"5m",
"scroll_id":"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAF1-4WRjk5NTF6d0NSbWFyODZmdFlGUkpadw=="
}
scroll=5m 指定了快照存在时间 5 分钟,通过快照返回的id ,然后拿id 去再次查询