Elasticsearch的深度分页

查看篇博客可以先查看下elasticsearch的DSL搜索方便理解:传送门接描述

一、深度分页分析

1.深度分页:(from:9999;size:10) 第9999后面的10条数据的话就会报错,因为es最大深度是支持搜索到底10000条数据,这个:index.max_result_window字段控制的,默认是10000条数据

POST 192.168.1.117:9200/sell/_doc/_search

{"query": {"match_all": {}},"from": 9999,"size": 10
}

2.例如,我么有三个shard(分片),每个分片有10w条数据如果要查询9999-10009的数据,就会分别从每个分片中获取10009条数据,一共30027条数据,然后进行排序获取出10条数据,所以深度分页会给系统带来很大的压力

二、解决方式一(限制分页数)

我们可以限制分页的数量,而规避深度分页带来的性能影响,例如天猫会限制在80页

二、解决方式二(修改max_result_window初始值)

4.查看设置信息

GET 192.168.1.117:9200/sell/_settings

{"sell": {"settings": {"index": {"number_of_shards": "3","provided_name": "sell","max_result_window": "10000", // 默认值"creation_date": "1605420740874","number_of_replicas": "1","uuid": "K4gnxKV3R5-AoxeMltlA5Q","version": {"created": "7040299"}}}}
}

5.修改max_result_window的初始值,修改成100000

PUT 192.168.1.117:9200/sell/_settings

{"index.max_result_window": 100000
}

6.之后再搜索(9999-10099)数据就不会报错了

二、解决方式二(使用scroll api)

scroll api官方文档

1.滚动搜索(scroll api):会先查询出一部分数据然后依次查询,通过滚动的id来标记每次查询的位置,下一次查询就从该位置往后获取对应的数据,每次查询都是基于历史数据快照,如果此时有一个数据变在我们的搜索中是不会被体现出来的

POST 192.168.1.117:9200/sell/_search?scroll=1m // 1m表示的是此次会话的时间为1分钟

请求:

{"query": {"match_all": {}},"sort": ["_doc"], // 根据文档进行排序"size": 5       // 每次查询的数据量
}

响应:

{// _scroll_id就是标记查询的位置"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoAwAAAAAAAAAQFkJscVMzeEczVDBHOFM3RE5Qb2xCWkEAAAAAAAAAEhZCbHFTM3hHM1QwRzhTN0ROUG9sQlpBAAAAAAAAABEWQmxxUzN4RzNUMEc4UzdETlBvbEJaQQ==",// 查询出的数据省略
}

2.执行下一次搜索

POST 192.168.1.117:9200/_search/scroll

{"scroll_id": "DnF1ZXJ5VGhlbkZldGNoAwAAAAAAAAATFkJscVMzeEczVDBHOFM3RE5Qb2xCWkEAAAAAAAAAFRZCbHFTM3hHM1QwRzhTN0ROUG9sQlpBAAAAAAAAABQWQmxxUzN4RzNUMEc4UzdETlBvbEJaQQ==","scroll": "1m"
}

Elasticsearch的深度分页相关推荐

  1. 如何在elasticsearch里面使用深度分页功能

    2019独角兽企业重金招聘Python工程师标准>>> 前面的文章提到过es默认的from+size的分页方式返回的结果数据集不能超过1万点,超过之后返回的数据越多性能就越低. 这是 ...

  2. 京东面试题:ElasticSearch深度分页解决方案

    前言 Elasticsearch 是一个实时的分布式搜索与分析引擎,在使用过程中,有一些典型的使用场景,比如分页.遍历等. 在使用关系型数据库中,我们被告知要注意甚至被明确禁止使用深度分页,同理,在 ...

  3. elasticsearch java 分页查询_elasticsearch深度分页问题

    正版包邮elasticsearch实战与原理 70.1元 包邮 (需用券) 去购买 > elasticsearch分页对于用过es的人应该都会使用 ,和数据库的分页类似,如下所示,通过from ...

  4. Elasticsearch:Scroll深度分页及返回大量数据

    目录 方法一 设置size 方法二 from and size分页 方法三 scroll and scan滚屏. 在使用ES时,有时候不可避免的要返回大量的数据或者说返回满足你的查询条件的全部数据,而 ...

  5. ElasticSearch之处理深度分页

    ElasticSearch之处理深度分页 一.常规分页 二.scroll分页 三.search_after 在ES中实现分页的方法有三种,我们逐个分析一下他们的优缺点. 一.常规分页 在ES中,我们可 ...

  6. ElasticSearch利用Search After解决深度分页问题

    ElasticSearch利用Search After解决深度分页问题 1.ElasticSearch常见分页 2.ElasticSearch深度分页问题 3.ElasticSearch深度分页问题的 ...

  7. ElasticSearch 分页查询及深度分页原理与实现

    查询流程 查询阶段 在初始化查询阶段(query phase),查询被向索引中的每个分片副本(原本或副本)广播.每个分片在本地执行搜索并且建 立了匹配 document 的优先队列(priority ...

  8. 3.Elasticsearch学习之深度分页、游标查询、以及批量操作

    1.深度分页 1.分页查询 POST /shop/_doc/_search { "query": { "match_all": {} },"from& ...

  9. ElasticSearch 深度分页详解

    来源 | OSCHINA 社区 作者 | 京东云开发者-何守优 原文链接:https://my.oschina.net/u/4090830/blog/5593128 1 前言 ElasticSearc ...

最新文章

  1. oracle数据库按照城市分组_大数据分组怎样才会更快
  2. 吴恩达,45岁生日快乐!提出著名二八定律:80%数据+20%模型=更好的AI
  3. 树莓派3 mysql端口_树莓派3 之 安装Mysql服务
  4. [线性代数]Note3--乘法和逆矩阵
  5. opensource项目_最佳Opensource.com:法律
  6. SmartCommit让复合提交不在是难题
  7. 基于组织目标采用合适的敏捷方法
  8. 稳定币usda是哪个发行的_什么是USDA?_USDA币介绍_USDA币种百科_创始团队和代币总量_蜜蜂查...
  9. 错误: 找不到符号 符号: 方法 crossFade() 位置: 类 RequestBuilderDrawable
  10. 京东历史价格查询的方法是?
  11. 能安装Chrome扩展和油猴脚本的手机浏览器
  12. 4438的代码分析一
  13. 数据库运行sql文件
  14. 《Microduino实战》——3.7 光敏电阻
  15. 软件工程Alpha冲刺day2
  16. HCIA 8-17 笔记
  17. VoIP技术(3)-语音编码算法
  18. 脚本引擎小PK: SpiderMonkey vs V8
  19. flex FileReference帮助
  20. [数学建模]学习笔记1:初等建模

热门文章

  1. 无线承载网络 组或资源的状态不是执行请求操作的正确状态 解决方法
  2. (亚马逊第一步)撸一个亚马逊服务器从注册到登录所需几步
  3. 1808亿次,16倍的超越!谈支付宝红包的高并发挑战
  4. Java并发编程之CountDownLatch
  5. 安卓10修改系统ntp服务器,安卓修改ntp服务器地址
  6. 连续型随机变量及其概率密度
  7. ❤️欢迎关注我的公众号: 工程师看海❤️
  8. VBA添加Excel工作表
  9. java对账_java后台实现支付宝对账功能的示例代码
  10. 服务器常见错误代码500、501、502、503、504、505分析