Elastic Stack--16--ES三种分页策略

news2024/10/9 19:35:29

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 方式一:from + size
    • 实现原理
    • 使用方式
    • 优缺点
  • 方式二:scroll
    • 实现原理
    • 使用方式
    • 优缺点
  • 方式三:search_after
    • 实现原理
    • 使用方式
    • 优缺点
  • 三种方式总结


在这里插入图片描述

方式一:from + size

  • from + size是Elasticsearch中最直观的分页方式。其中,from参数表示从第几条记录开始返回,size参数表示返回的记录数。

实现原理

在这里插入图片描述

使用方式

  • 在Elasticsearch中,使用from和size进行分页查询的DSL(Domain Specific Language):
GET /your_index/_search
{
    "query": {
        "match_all": {}  // 这里可以替换为任何你需要的查询条件
    },
    "from": 0,           // 从第几条记录开始,索引从0开始
    "size": 10,          // 返回的记录条数
    "sort": [
        { "field_name": {"order": "asc"}}  // 可选,根据某个字段进行排序
    ]
}

from参数指定了从哪一条记录开始返回,size参数指定了要返回的记录条数。

假设一个名为products的索引,搜索名称中包含"apple"的产品,并且从第10条记录开始返回10条结果,按价格升序排序:

GET /products/_search
{
    "query": {
        "match": {
            "name": "apple"
        }
    },
    "from": 9,  // 注意,索引从0开始,所以第10条记录的索引是9
    "size": 10,
    "sort": [
        { "price": {"order": "asc"}}
    ]
}

from设置为9以跳过前9条记录,size设置为10以返回接下来的10条记录,并且结果按照price字段的升序排列。

Elasticsearch会返回如下响应:

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 100,  // 假设总共有100条符合查询条件的产品
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "products",
        "_type": "_doc",  // 注意:在Elasticsearch 7.x及之后的版本中,_type字段通常被设置为"_doc"
        "_id": "10",
        "_score": 1.0,
        "_source": {
          "name": "Apple iPhone 12",
          "price": 999.99,
          // ... 其他字段
        }
      },
      // ... 其他9条产品的结果
      {
        "_index": "products",
        "_type": "_doc",
        "_id": "19",
        "_score": 1.0,
        "_source": {
          "name": "Apple Watch Series 6",
          "price": 399.99,
          // ... 其他字段
        }
      }
    ]
  }
}

优缺点

在这里插入图片描述
在这里插入图片描述

使用场景

  • 适用于数据量不大、实时性要求高的场景。

方式二:scroll

  • scroll是一种基于游标的分页方式,它允许我们遍历大量数据而不需要在每次请求时重新计算整个搜索。

实现原理

在这里插入图片描述

使用方式

在Elasticsearch中,scroll是一种用于检索大量数据(可能是数百万条记录)的分页机制,它允许你保持一个搜索的“上下文”并继续检索结果,而不需要为每一页都重新计算整个搜索。以下是使用scroll进行分页的DSL代码示例:

DSL 代码示例

// 初始化scroll搜索
POST /_search/scroll
{
    "size": 100,           // 每次返回的文档数量
    "scroll": "1m",        // 保持scroll上下文的活动时间,这里是1分钟
    "query": {
        "match_all": {}    // 可替换为任何需要的查询条件
    }
}

// 后续的scroll请求(在第一次请求返回后)
POST /_search/scroll
{
    "scroll": "1m",        // 保持与第一次请求相同的scroll上下文时间
    "scroll_id": "你的scroll_id" // 第一次请求返回的scroll_id
}

在这里插入图片描述
响应结果

第一次请求会返回如下结果:

{
  "_scroll_id": "DnF1ZXJ5THV6QXRlbl84791547351",
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1000,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "your_index",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          // ... 文档的源数据 ...
        }
      },
      // ... 其他文档 ...
    ]
  }
}

在这里插入图片描述

  • 响应中可以看到_scroll_id字段,这个值需要用于后续的scroll请求。

后续的scroll请求

使用上面响应中的_scroll_id进行后续的scroll请求:

POST /_search/scroll
{
    "scroll": "1m",
    "scroll_id": "DnF1ZXJ5THV6QXRlbl84791547351"
}

  1. 这个请求会返回下一批文档,直到所有的文档都被检索完或者scroll上下文过期。
  2. 根据你的Elasticsearch集群的实际设置和性能需求来调整size和scroll参数的值。

优缺点

在这里插入图片描述

方式三:search_after

  • search_after是一种基于排序值的分页方式,它允许我们根据上一页的最后一条数据的排序值来获取下一页的数据。

实现原理

在这里插入图片描述

使用方式

在这里插入图片描述

GET /products/_search
{
    "size": 10,
    "query": {
        "match_all": {}  // 或者你可以添加具体的查询条件
    },
    "sort": [
        { "price": {"order": "desc"}},
        { "created_at": {"order": "asc"}}
    ]
}

在这里插入图片描述

{
    "_index": "products",
    "_type": "_doc",
    "_id": "最后一个产品的ID",
    "_score": null,
    "_sort": [
        129.99,  // 最后一个产品的price值
        "2023-10-23T12:00:00Z"  // 最后一个产品的created_at值
    ],
    "_source": {
        // ... 产品的详细信息 ...
    }
}

在这里插入图片描述

GET /products/_search
{
    "size": 10,
    "query": {
        "match_all": {}  // 保持与初始查询相同的查询条件
    },
    "sort": [
        { "price": {"order": "desc"}},
        { "created_at": {"order": "asc"}}  // 保持与初始查询相同的排序字段和顺序
    ],
    "search_after": [
        129.99,  // 上一页最后一个产品的price值
        "2023-10-23T12:00:00Z"  // 上一页最后一个产品的created_at值
    ]
}

在这里插入图片描述

优缺点

在这里插入图片描述

三种方式总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两个pdf怎么合并成一个pdf?超简单的合并方法分享

在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个文件的情况,以便更好地管理和分享。今天,将为大家详细介绍5种实用的方法,能够一键合并多个PDF文件,有需要的小伙伴快来一起学习下吧。 方法一&#xff1…

双十一买什么?双十一买什么东西最划算?超全双十一购物指南!

双十一即将到来,一年一度的购物狂欢盛宴再度开启!在海量的商品面前,怎样挑选出既心仪又实惠的好物,已然成为大家关注的重点。下面为您呈上一份极为全面的2024年双十一必买清单,助力您轻松购物,收获满满&…

详解Xilinx JESD204B PHY层端口信号含义及动态切换线速率(JESD204B五)

Xilinx官方提供了两个用于开发JESD204B的IP,其中一个完成PHY层设计,另一个完成传输层的逻辑,两个IP必须一起使用才能正常工作。 7系列FPGA只能使用最多12通道的JESD204B协议,线速率为1.0至12.5 Gb/s;而UltraScale和Ult…

胤娲科技:AI评估新纪元——LightEval引领透明化与定制化浪潮

AI评估的迷雾,LightEval能否拨云见日? 想象一下,你是一位AI模型的开发者,精心打造了一个智能助手,却在最终评估阶段遭遇了意外的“滑铁卢”。 问题出在哪里?是模型本身不够聪明,还是评估标准太过…

新手如何打造抖音矩阵账号,矩阵账号的优势有哪些?如何搭建矩阵系统的源码开发oem部署

抖音新手如何打造爆款矩阵账号? 在当前数字媒体盛行的时代,抖音作为一个领先的短视频分享平台,为品牌和个人提供了展示自己的舞台。对于初学者而言,构建一个有效的抖音账号矩阵是提升影响力的关键策略!今天&#xff0c…

mysql内置函数查询

聚合函数 :聚合函数查询时纵向查询,它是对一列的 值进行计算,然后返回一个单一的值,聚合函数会忽略空值。 namedescriptionavg()返回参数的平均值bit_and()按位返回andbit_or()按位返回orbit_xor()按位返回异或count()返回返回的…

Uos-Uos使用Remmina通过VNC远程连接到另一台Uos

Uos使用Remmina通过VNC远程连接到另一台Uos 一、概述二、对端机器安装 VNC服务器三、本机远程对端服务器 一、概述 这里记录一下使用Remmina通过VNC远程连接到另一台Uos系统,环境均是Linux操作系统 本机ip:10.8.11.64 对端ip:10.20.42.17 …

进程的状态的理解(概念+Linux)

文章目录 进程的状态并行和并发物理和逻辑 时间片进程具有独立性等待的本质运行阻塞标记挂起等待 Linux下的进程状态(一)运行状态(R - running)(二)睡眠状态(S - sleeping)&#xff…

银河麒麟V10中启用SELinux

银河麒麟V10中启用SELinux 1、启用SELinux1.1 切换到strict模式1.2 注意 2、验证SELinux状态 💖The Begin💖点点关注,收藏不迷路💖 在银河麒麟高级服务器操作系统V10中,可以使用security-switch工具来启用SELinux&…

springboot邮件群发功能的开发与优化策略?

springboot邮件配置指南?如何实现spring邮件功能? SpringBoot框架因其简洁、高效的特点,成为了开发邮件群发功能的理想选择。AokSend将深入探讨SpringBoot邮件群发功能的开发过程,并提出一系列优化策略,以确保邮件发送…

香山南湖架构分析--FE

总体架构 分支预测和指令缓存,通过FTQ达到解耦的目的;FTQ将请求送给ICache,进行取指;取出的指令码通过预译码初步检查分支预测的错误并及时冲刷预测流水线;检查后的指令送入指令缓冲并传给译码模块,最终形成后端的指令…

抓住最后机会!24年PMP认证报名今日开始,流程详解助你成功

为减少同一时间集中报名造成的网络拥堵,本次报名将采取以下形式分地区、分批次开放报名。 一、考试安排 考试时间:2024年11月30日 第一批报名城市 2024年10月9日10:00至10月16日16:00,以下城市的考点将开通报名&…

城市交通场景分割系统源码&数据集分享

城市交通场景分割系统源码&数据集分享 [yolov8-seg-C2f-Faster&yolov8-seg-GhostHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

FineReport打开报错“配置数据库出错“怎么解决?

配置数据库被锁住,是否重置?将在embed文件夹生成备份并重置 我直接用管理员身份证打开就完美解决了!

fmql之Linux下AXI GPIO、MISC

AXI GPIO 正点原子第41章。 要使用AXI GPIO,就要在vivado工程中,添加相关的IP。 然后dts会自动生成相关的AXi GPIO的设备树内容。 MISC 正点原子第42章。 /***************************************************************Copyright © ALIENTE…

C++--特殊类的设计

下面所实现类的源码:源码链接 不可拷贝类 在C中,我们有时候需要设计一些不可拷贝的类,即不允许用户通过拷贝构造函数或赋值操作来创建该类的副本。这样设计通常是为了确保资源(如文件描述符、窗口句柄等)的唯一性&…

(JAVA)熟悉队列的进阶结构 - 优先队列

1. 优先队列 ​ 普通队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。 ​ 在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有…

FTP连接池与多线程上传下载算法实现(C语言)

FTP连接池与多线程上传下载算法实现(C语言) 设计思路伪代码示例C代码示例为了避免多线程环境下FTP连接池在故障重连时导致的竞争条件和core dump问题,我们需要设计一个精细的连接池管理系统,确保在连接重连时,其他线程不会尝试使用该连接。以下是一个简化的设计思路和示例…

开源计算器应用的全面测试计划:确保功能性和可靠性

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Navicat图形化设置字段unique

点击索引,选择字段和索引类型即可。