es 分页查询

1、from和size是查询所有数据,然后剔除不要的部分

复制代码
POST /my_index/my_type/_search
{
    "query": { "match_all": {}},
    "from": 100,
    "size":  10
}

2、scroll是记录了一个读取的位置,保证下一次快速继续读取

scroll

查询阶段:将查询的结果集,doc_id列表保存在了一个上下文里

fetch阶段:根据size取回即可

复制代码
POST /twitter/tweet/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}

Query阶段:每个shard将命中的结果( doc_id和_score) 按照 _score 顺序在上下文中创建一个优先队列快照,并通过scroll_id指向它,lastEmittedDoc指向上次访问的位置,最后将TOP(size)的doc id返回给协调节点。

Fetch阶段:协调节点将各个shard返回的结果再进行合并排序,最后通过doc_id查找返回结果的全量数据。之后更新各个分片上的上下文。

3、search_after

根据上一页最后一条数据来确定下一页的位置,因为每一页的数据依赖于上一页最后一条数据,所以无法完成跳页请求;在分页请求过程中如果有索引数据的增删改查,这些变更也会实时的反映到游标上。

核心思想记录上一次最后访问的位置

复制代码
GET twitter/_search
{
    "size": 10,
    "query": {
        "match" : {
            "title" : "es"
        }
    },
    "search_after": [124648691, "624812"],
    "sort": [
        {"date": "asc"},
        {"_id": "desc"}
    ]
}

ES的排序方式

在query阶段就要进行排序,不全量查询的情况下怎么排序的?

  • filter 查询 为 doc_id(Lucene 文件结构的当时索引时的先后顺序)
  • 按照相关性得分排序( _score)
  • 按照指定的字段排序 (term index中的顺序)

es默认分页查询方式

分页方式 性能 优点 缺点 场景
from + size 灵活性好,实现简单 深度分页问题 数据量比较小,能容忍深度分页问题
scroll 解决了深度分页问题 无法反应数据的实时性(快照版本)维护成本高,需要维护一个 scroll_id 海量数据的导出需要查询海量结果集的数据
search_after 性能最好不存在深度分页问题能够反映数据的实时变更 实现复杂,需要有一个全局唯一的字段连续分页的实现会比较复杂,因为每一次查询都需要上次查询的结果,它不适用于大幅度跳页查询

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

es分页查询原理_喂喂喂_java的博客-CSDN博客

相关推荐
2301_781571426 分钟前
mysql数据库响应缓慢如何排查_使用EXPLAIN分析执行计划
jvm·数据库·python
彳亍10122 分钟前
实现倒计时数字在到达1后自动隐藏(2为最后可见数字),同时继续运行至-1再终止
jvm·数据库·python
lolo大魔王30 分钟前
Go 后端实战|Gin + GORM V2 + MySQL 企业级 API 项目开发(完整版)
mysql·golang·gin
Hical_W40 分钟前
Hical 踩坑实录五部曲(五):Boost.MySQL 协程集成的 5 个坑
数据库·mysql·开源
X566142 分钟前
CSS如何处理SSR中CSS引入_在服务端渲染时提取关键CSS
jvm·数据库·python
哆哆啦001 小时前
使用 Obsidian + GitHub Actions + GitHub Pages 搭建内容发布流
数据库·笔记·github·obsidian
duke8692672141 小时前
PostgreSQL 中高效插入多对多关联数据的三种方案对比与最佳实践
jvm·数据库·python
迷枫7121 小时前
达梦数据库备份还原:物理备份、逻辑备份
数据库
czlczl200209251 小时前
mysql表复制方案
数据库·mysql
m0_463672202 小时前
mysql数据库如何进行逻辑备份与物理备份对比_优缺点分析
jvm·数据库·python