网站首页 > 技术文章 正文
背景
我们的应用是采用NLPchina开源的elasticsearch-sql插件来进行查询分页和导出,由于ElasticSearch的max_result_window的限制,在深度分页和大批量数据导出时就会出现问题,故简单研究下。
ElasticSearch的max_result_window默认为10000条,当使用elasticsearch-sql执行select * from test limit 10000,1时,ElasticSearch就返回错误。
ElasticSearch 分页总结
ElasticSearch 是搜索引擎,从搜索的意义上来说,如果筛选条件或前几页都找不到需要的数据,继续深度分页也不会找到想要的数据。
ElasticSearch 不要做深度分页和随机深度跳页。
ES 分页建议
- 增加默认的筛选条件,尽量减少数据量的展示,比如:最近一个月;
- 限制总分页数,比如:淘宝、京东仅显示100页查询结果,百度仅显示76页;
- 修改跳页的展现方式,改为滚动显示,或小范围跳页,比如:谷歌、百度的小范围跳页。
小范围跳页示例
ES 三种分页比较
- from+size:适用于浅分页(数据量小于max_result_window),在增大max_result_window情况下,也可实现深度分页,但效率低下,可能出现 OOM。
- scroll:适用于数据导出,基于生成的历史快照查询,对于数据的变更不会反映到快照上。
- search_after:适用于实时请求和高并发场景(深度分页+排序),由于每一页的数据依赖于上一页最后一条数据,所以无法做到随机跳页(滚动显示)。
elasticsearch-sql 分页
分页(limit):深度跳页和深度随机跳页无法实现,但可做限制页数+小范围跳页的替代方案。
导出
- scroll:支持scroll方式,具体 sql 语句示例:SELECT /*! USE_SCROLL(100,30000)*/ firstname , balance FROM accounts;
- csv-result:有个 csv 导出的实验类功能(未验证)。
https://github.com/NLPchina/elasticsearch-sql/wiki
参考文章
https://juejin.cn/post/6850037275456339975
https://www.cnblogs.com/jpfss/p/10815172.html
猜你喜欢
- 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)