• 【闲聊杂谈】ElasticSearch的深度分页相关


    分页问题是Elasticsearch中最常见的查询场景之一,正常情况下分页代码如实下面这样的:

    GET /index/_search
    {
      "from": 0,
      "size": 5
    }

    当from + size大于10000的时候,就会出现问题:

    报错信息的解释为当前查询的结果超过了10000的最大值。那么疑问就来了,明明只查询了5条数据,为什么它计算最大值要加上我from的数量呢?而且Elasticsearch不是号称PB及数据秒级查询,几十亿的数据都没问题,怎么还限制最大查询前10000条数据呢?这里有一个字很关键:“前”,前10000条意味着什么?意味着数据肯定是按照某种顺序排列的,ES中如果不人工指定排序字段,那么最终结果将按照相关度评分排序。

    什么是深分页

    10万名高考生中查询成绩为的10001-10100位的100名考生的信息:

    假设10万名考生的考试信息被存放在一个exam_info索引中,由于索引数据在写入是并无法判断在执行业务查询时的具体排序规则,因此排序是随机的。而由于ES的分片和数据分配策略为了提高数据在检索时的准确度,会把数据尽可能均匀的分布在不同的分片。假设此时我们有五个分片,每个分片中承载2万条有效数据。按照需求我们需要去除成绩在10001到10100的一百名考生的信息,就要先按照成绩进行倒序排列。然后按照page_size: 100&page_index: 101进行查询。即查询按照成绩排序,第101页的100位学员信息。

    单机数据库的查询逻辑很简单&#

  • 相关阅读:
    不同对话分支的生成展示
    python的datetime模块常用的语法和实例
    Git-安装与使用(快速上手图文教程)
    Linux操作系统之进程控制
    创建虚拟python开发环境
    刷题记录:牛客NC20439[SHOI2017]期末考试
    【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块
    C++——cv::Rect数据结构详解
    Go 接口
    【Mysql】case when 使用时的注意点
  • 原文地址:https://blog.csdn.net/FeenixOne/article/details/126034014