网站首页 > 技术文章 正文
search_after 深分页
scroll 的方式,官方的建议不用于实时的请求(一般用于数据导出),因为每一个 scroll_id 不仅会占用大量的资源,而且会生成历史快照,对于数据的变更不会反映到快照上。
search_after 分页的方式是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上。但是需要注意,因为每一页的数据依赖于上一页最后一条数据,所以无法跳页请求。
为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,官方推荐使用 _uid 作为全局唯一值,其实使用业务层的 id 也可以。
GET /ad/_search
{
"query":{
"match_all":{
}
},
"from":0,
"size":2,
"sort":[
{
"_id":{
"order":"desc"
}
}
]
}
# 输出结果
{
"took":0,
"timed_out":false,
"_shards":{
"total":1,
"successful":1,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":11,
"relation":"eq"
},
"max_score":null,
"hits":[
{
"_index":"ad",
"_type":"_doc",
"_id":"9",
"_score":null,
"_source":{
"name":null,
"price":666,
"color":"orange",
"ad":"this is a orange phone",
"label":[
"orange",
"unknown"
]
},
"sort":[
"9"
]
},
{
"_index":"ad",
"_type":"_doc",
"_id":"8",
"_score":null,
"_source":{
"name":null,
"price":666,
"color":"orange",
"ad":"this is a orange phone",
"label":[
"orange",
"unknown"
]
},
"sort":[
"8"
]
}
]
}
}
使用search_after必须要设置from=0。 这里使用_id作为唯一值排序。我们在返回的最后一条数据里拿到sort属性的值传入到search_after。
使用sort返回的值搜索下一页:
GET /ad/_search
{
"query":{
"match_all":{
}
},
"from":0,
"size":2,
"search_after":[
"8"
],
"sort":[
{
"_id":{
"order":"desc"
}
}
]
}
# 输出结果
{
"took":1,
"timed_out":false,
"_shards":{
"total":1,
"successful":1,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":11,
"relation":"eq"
},
"max_score":null,
"hits":[
{
"_index":"ad",
"_type":"_doc",
"_id":"7",
"_score":null,
"_source":{
"price":999,
"color":"black",
"ad":"this is a black phone",
"label":[
"black",
"unknown"
]
},
"sort":[
"7"
]
},
{
"_index":"ad",
"_type":"_doc",
"_id":"6",
"_score":null,
"_source":{
"name":"",
"price":2999,
"color":"black",
"ad":"this is a black phone",
"label":[
"black",
"unknown"
]
},
"sort":[
"6"
]
}
]
}
}
猜你喜欢
- 2024-10-14 Excel表格太大时,怎么打印到一页上?
- 2024-10-14 写给Java应用开发者的Elasticsearch调优手册
- 2024-10-14 Excel表格太大时,怎么打印到一页上?收藏
- 2024-10-14 Excel中如何设置自动分页打印(excel表格怎么设置分页打印)
- 2024-10-14 还在浪费A4纸?按下Excel这个按钮,所有内容即可打印在同一页
- 2024-10-14 滑动页面时的控件设计规范——吸底&锚点
- 2024-10-14 ElasticSearch优化点简述(elasticsearch集群优化)
- 2024-10-14 一组Excel打印技巧,实用就好(excel打印技巧大全)
- 2024-10-14 打印设置用得好,天天追着幸福跑(打印基本设置)
- 2024-10-14 VBA实用代码赏析之八:页面、日期函数及选择的操作
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)