ES分页问题

分页方式3种

  1. from + size 浅分页
    其中,from定义了目标数据的偏移值,size定义当前返回的数目。默认from为0,size为10,即所有的查询默认仅仅返回前10条数据。越往后查询效率越低; 5w条以内勉强可用;
    如果搜索size大于10000,需要设置index.max_result_window参数

    PUT _settings
    {
    "index": {
    "max_result_window": "10000000"
    }
    }

  2. scroll 深分页,
    滚动读取, 相当于创建一个索引快照,然后按照索引依次去查询;

    GET test_dev/_search?scroll=5m
    {
    "query": {
    "bool": {
    "filter": [
    {
    "term": {
    "age": 28
    }
    }
    ]
    }
    },
    "size": 10,
    "from": 0,
    "sort": [
    {
    "timestamp": {
    "order": "desc"
    },
    "_id": {
    "order": "desc"
    }
    }
    ]
    }

scroll=5m表示设置scroll_id保留5分钟可用。

使用scroll必须要将from设置为0。

size决定后面每次调用_search搜索返回的数量;

然后我们可以通过数据返回的_scroll_id读取下一页内容,每次请求将会读取下10条数据,直到数据读取完毕或者scroll_id保留时间截止;

缺点:

① 不能跳页读取,只能顺序读取;

②历史快照,不能查询实时数据;

③scroll_id会占用大量的资源,尤其是排序(用完后要记得删除)

2.2 Scroll Scan 的遍历与普通 Scroll 一样,初始化存在一点差别,但没有排序功能;

Scroll-Scan结果没按index顺序返回,没有排序,可以提高取数据性能。

2.3 Sliced Scroll 切片并发, 与Scroll Scan类似只是进行切片,然后并发执行;

  1. Search After (ES5之后才有的)
    search_after 分页的方式是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上。但是需要注意,因为每一页的数据依赖于上一页最后一条数据,所以无法跳页请求。 这就要求每个文档必须有一个全局唯一值

参考: https://juejin.cn/post/7092046739414204430

相关推荐
城北徐宫1 小时前
MySQL约束条件一览
数据库·mysql
csdn_aspnet3 小时前
使用 Docker 和 RedisInsight 设置 Redis 以进行本地开发
redis·docker·容器·redisinsight
ClouGence3 小时前
数据库变更审批困局,被这个开源工具解决了
数据库·开源
TDengine (老段)4 小时前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
starrocks_stella5 小时前
EMR Serverless StarRocks Object Table:用 SQL 连接 OSS 文件与多模态 AI
数据库
这个DBA有点耶5 小时前
以为自增ID只是有空洞?聊聊双主架构下无声的“数据覆盖”
数据库·mysql·dba
钱栈up6 小时前
内网全断,怎么核实高炉和烧结系统的数据库对接信息
数据库
weavecodes6 小时前
双层缓存与权限实时生效:织码在线教育系统的 Caffeine + Redis 设计
数据库
bksczm6 小时前
InnoDB 页结构详解:页类型、页头页尾、数据行与页目录
数据库·mysql
全栈陈序员7 小时前
Git】从入门到精通(八)—— git log:查看提交历史
大数据·git·elasticsearch