es 分页查询

这篇具有很好参考价值的文章主要介绍了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博客文章来源地址https://www.toymoban.com/news/detail-408013.html

到了这里,关于es 分页查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

    MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。想查看官网相关内容的化我这里提供了官网地址:https://baomidou.com/ 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般

    2024年02月04日
    浏览(54)
  • 若依框架ruoyi前后端实现自定义分页功能(ES分页查询)

    若依 ruoyi 框架主要针对 Sql 进行了分页集成,像平时别的一些数据库或者中间件的分页,则需要自己实现. 本文主要使用 ES 的分页查询为例,展示前后端的基本操作,原理可以类推到其他中间件分页查询上.

    2024年02月12日
    浏览(40)
  • es 使用 cardinality + collapse做分页去重查询

    1.首先我们来介绍一下cardinality的用法 cardinality 即去重计算,类似sql中 count(distinct),先去重再求和,计算指定field值的种类数。 可以看到,aggregations聚合下,返回了按名字查询去重后的结果数,但是只有去重后的条数,没有具体的数据。 2.接下来我们再看一下collapse的用法

    2024年02月01日
    浏览(31)
  • ES简单教程(四)使用ElasticsearchRestTemplate多条件分页查询(复杂版)

    TIPS :本文实现类似数据库后台管理系统的多条件分页查询。

    2024年02月11日
    浏览(38)
  • java 整合ES实现文档增删改查(多条件分页查询)

    本文采用ES版本为8.7.1 由于只存储文章,仅用固定索引即可,索引用kibanna直接生成,省略索引部分的增删查步骤 抓取返回信息是因为版本问题无法解析ES返回的正确信息,实际操作成功但是会报错 我这边只需要单索引操作,有需求的可以让前端传过来

    2024年02月13日
    浏览(29)
  • 若依整合Easy-Es实现文章列表分页查询

    Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些方面甚至比M

    2024年01月16日
    浏览(32)
  • Python所有方向的学习路线,你们要的知识体系在这,千万别做了无用功!

    一直以来都有很多想学习Python的朋友们问我,学Python怎么学?爬虫和数据分析怎么学?web开发的学习路线能教教我吗? 我先告诉大家一个点, 不管你是报了什么培训班,还是自己在通过各种渠道自学,你一定要注重一个东西:完整的知识体系。 感觉很迷茫?学了一段时间还

    2024年02月06日
    浏览(42)
  • ElasticSearch第六讲 ES 三种分页查询from+size / Scroll /search_after

    我的Git地址:https://gitee.com/ITLULU 欢迎访问 ES的分页查询和关系数据库的分页查询的区别: ES分页查询有以下几种: 1:简单的 from size (有默认的最大Size,不可无限大小查询,因为数据过多查询性能会降低,且也要考虑内存问题,以及OS缓存数据的能力) 2: scroll基于查询窗口

    2024年02月01日
    浏览(41)
  • elasticSearch 分页查询出现重复数据

            match查询默认按照评分排序,出现数据评分一致,客户端调用分页的时候,会出现数据重复错乱很严重。from size 做分页,每次都是重新加载,所以评分一致的数据,顺序有可能会变化。在分页的临界点,容易导致数据重复。  解决方法: 1. 使用不重复字段进行排

    2024年04月16日
    浏览(36)
  • oracle 大数据常见优化 &分页查询

    参考某微信社区博主,此文为温故知新;原参考博主账号与链接已丢失 1.limit 语句样式:select * from table limit m,n 适用场景:适用于数据量较少的情况(元组、百/千) 缺点:全表扫描,速度劣势,有的数据库结果集返回不稳定。limit限制是从结果集的M位置处取出N条输出,其余

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包