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博客

相关推荐
IT大白鼠6 分钟前
MySQL 分布式集群系列 · 第八篇(收官)——NDB 集群面试高频题 +架构总结与未来演进
分布式·mysql·面试
IT大白鼠11 分钟前
MySQL 分布式集群系列 · 第七篇——生产调优实战:NDB 性能、内存、高可用全方位优化
数据库·分布式·mysql
IvorySQL13 分钟前
打造下一代 AI Agent 的统一多模智能数据底座——PostgreSQL 与 AI 的融合演进
数据库·人工智能·postgresql
ShineWinsu14 分钟前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
isNotNullX20 分钟前
智能问数为什么答不准?数据、语义、模型、SQL四层拆解
数据库
烂蜻蜓2 小时前
Django入门教程(三):django-admin与manage.py命令完全指南
数据库·django·sqlite
yunlaodacom2 小时前
腾讯云国际版代理商:COS标准、低频、归档和深度归档怎么选?存储成本与数据取回区别
数据库·云计算·腾讯云
Nturmoils2 小时前
SQL Server数据库迁移:V9R4C019 如何接住存量 T-SQL 批处理
数据库
NineData2 小时前
NineData智能数据管理平台新功能发布|2026年8月
数据库·人工智能·oracle·中间件·agent·数据库开发·ninedata
Elastic 中国社区官方博客2 小时前
Elasticsearch 向量数据库:几分钟内完成部署,以经济高效的方式扩展至数千亿规模
大数据·运维·数据库·elasticsearch·搜索引擎·ai·全文检索