当前位置: 首页 > news >正文

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

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

文章目录

  • 方式一: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值]
}

在这里插入图片描述

优缺点

在这里插入图片描述

三种方式总结

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

相关文章:

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 方式一:from size实现原理使用方式优缺点 方式二:scroll实现原理使用方式优缺点 方式三:search_after实现原理使用方式优缺点 三…...

[LeetCode] 315. 计算右侧小于当前元素的个数

题目描述: 给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 题目链接: . - 力扣(LeetCode) 题目主要思路&a…...

【hot100-java】二叉树展开为链表

二叉树篇。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …...

如何在在 YOLOv3模型中添加Attention机制

在YOLOv3模型中添加Attention机制需要以下几个步骤: 1. 规定格式 当添加新的模块(如Attention机制模块)时,需要像定义[convolutional]、[maxpool]等层在cfg文件中的格式一样,对新模块进行格式规定。例如对于SE模块&a…...

单点登录Apereo CAS 7.1安装配置教程

笔者目前正在做一个单点登录的课题,历时较长总算摸到一些门路,其中的辛酸不易按下不表。截至本文发布,CAS的最新版本为7.1。由于涉及到课题内容,而且内容比较新,整理试验不容易,暂时只对VIP开放,后续课题完成后会完全开放,敬请谅解。 CAS项目区别 在CAS的项目选择上,…...

windows C++-移除界面工作线程(一)

本文档演示了如何使用并发运行时将 Microsoft 基础类 (MFC) 应用程序中由用户界面 (UI) 线程执行的工作移动到工作线程。 本文档还演示了如何提高冗长绘制操作的性能。 通过将阻塞性操作(例如,绘制)卸载到工作线程来从 UI 线程中移除工作&am…...

Qt小bug — LINK : fatal error LNK1158: 无法运行“rc.exe“

Qt小bug —— LINK :fatal error LNK1158:无法运行"rc.exe" 环境 Qt 5.14.2 MSVC 2015 x64 现象 解决 在电脑上找到rc.exe 和rcdll.dll (一般在C:\Program Files(x86)\Windows Kits*\bin\x64下面)拷贝到 C:\Qt\Qt5…...

c++小游戏

目录 狼人杀 走迷宫 炸弹人 贪吃蛇 飞翔的小鸟 跑酷 吃豆人 飞机大战 人生模拟器 坦克大战 修仙模拟器 搜集了一些小游戏&#xff0c;名字下是个人是个人喜欢度&#xff0c;可供参考~ 狼人杀 ❤❤❤❤ #include<bits/stdc.h> #include<cstdio> #incl…...

k8s为什么用Calico

‌Calico是一种开源的网络和安全解决方案&#xff0c;主要用于容器、虚拟机、宿主机之间的网络连接。‌ 它支持Kubernetes、OpenShift、Docker EE、OpenStack等PaaS或IaaS平台&#xff0c;提供高效的网络通信和安全控制功能‌12。 Calico的核心组件包括Felix、etcd、BIRD等。F…...

HashMap 和 Hashtable 有什么区别?

HashMap和Hashtable都是Java中常用的存储键值对的集合类&#xff0c;它们都实现了Map接口&#xff0c;但二者之间存在一些显著的区别。以下是对HashMap和Hashtable区别的详细归纳&#xff1a; 一、线程安全性 HashMap&#xff1a;是非线程安全的&#xff0c;即多个线程可以同…...

【机器学习】深度学习、强化学习和深度强化学习?

深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标&#xff0c;虽然都属于机器学习的范畴&#xff0c;但各自的实现方式和侧重点有所不同。 1. 深度学习&#xff08;Deep Learning&#xff09; 深度学习是一种基于神经网络的…...

fastadmin 多商户模式下侧边栏跳转路径BUG

记录&#xff1a;仅作自己项目记录&#xff0c;在一个域名下部署多套项目时&#xff0c;若不是多商户模式项目会出现跳转路径问题。 修改 \manystore\library\Auth.php 文件的 getSidebar 方法 // 1 改为&#xff1a; $v[url] isset($v[url]) && $v[url] ? $v[url]…...

java内置的四种函数式接口

供给型&#xff1a;Supplier 无入参&#xff0c;有返回值。 FunctionalInterface public interface Supplier<T> {T get();}消费型&#xff1a;Consumer 有入参&#xff0c;无返回值。 FunctionalInterface public interface Consumer<T> {void accept(T t);de…...

如何获取 uni-app 应用发布所需的证书、私钥与配置文件

引言 在开发和发布iOS应用时&#xff0c;开发者常常会面临一系列复杂的证书、私钥密码以及配置文件的管理问题。这些配置不仅影响到应用的开发调试&#xff0c;还决定了应用是否能够顺利通过审核并发布到App Store。对于使用uni-app进行开发的开发者来说&#xff0c;自动生成的…...

TCP网络通信——多线程

前面分别用多进程和多路复用完成了TCP网络通信&#xff0c;本文就来讲讲多线程的TCP通信。首先来了解一下线程的概念&#xff1a; 1、线程是进程的执行路线&#xff0c;它是进程内部的控制序列&#xff0c;或者说线程是进程的一部分(进程是一个资源单位&#xff0c;线程是执行单…...

【exp报错注入】

整数范围 最大整数 exp 函数介绍 报错盲注注入 payload分析 709C-ASCII 值就等于我们下面的 7091-1 &#xff0c;C就是我们要猜的值&#xff0c;当我们猜测的值和ASCII码相等时&#xff0c;那么exp就不会出现报错&#xff0c;因为1-1还是等于709&#xff1a; 练习 id1 an…...

基于SpringBoot问卷调查系统小程序【附源码】

基于SpringBoot问卷调查系统小程序 效果如下&#xff1a; 管理员登录界面 管理员功能界面 调查人管理界面 问卷调查管理界面 问卷题目管理界面 用户登录界面 APP首页界面 公告信息界面 研究背景 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&…...

LLM - 配置 GraphRAG + Ollama 服务 构建 中文知识图谱

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142795151 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 GraphR…...

简单认识redis - 6 redis 存储速度快的原因

1基于内存存储 缓存&#xff08;内存&#xff09;读写速度很快&#xff0c;相比于磁盘存储的Mysql 省去了磁盘I/O的次数。 2.高效的数据结构 SDS动态字符串&#xff1a; 1.字符串长度处理&#xff1a;Redis获取字符串长度&#xff0c;时间复杂度为O(1)&#xff0c;而C语言中&am…...

【Qt Quick】状态:State 使用

State 是 Qt Quick 中管理界面组件状态的关键工具。它允许我们定义组件的不同状态&#xff0c;并且在用户交互或事件发生时进行状态切换&#xff0c;从而实现属性、外观和行为的动态变化。通过使用 State&#xff0c;可以避免复杂的条件逻辑&#xff0c;使代码更加简洁和可维护…...

多模态学习:结合文本和图像的旋转判断

多模态学习&#xff1a;结合文本和图像的旋转判断 1. 引言 你有没有遇到过这样的情况&#xff1a;拍了一张带文字的图片&#xff0c;结果发现方向不对&#xff0c;需要手动旋转才能正常阅读&#xff1f;传统的图像旋转判断方法往往只依赖视觉特征&#xff0c;对于包含文字的图…...

Hunyuan-MT-7B翻译终端效果展示:Pixel Language Portal长文本段落对齐精度对比

Hunyuan-MT-7B翻译终端效果展示&#xff1a;Pixel Language Portal长文本段落对齐精度对比 1. 产品概览&#xff1a;像素语言冒险工坊 **像素语言跨维传送门(Pixel Language Portal)**是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译终端。与传统翻译工具不同&#xff0c…...

让通用 URL 准确落到目标 Page Builder:SAP Fiori 页面管理中的重定向实践

在很多 SAP Fiori 项目里,大家更容易把注意力放在 SAPUI5 组件、OData 服务、Launchpad 编排,或者 Fiori Elements 的元数据驱动开发上,却很少有人愿意花时间审视一条看似普通的访问路径。当系统进入页面管理阶段,尤其是管理员通过 Page Administration UI 去打开、维护、跳…...

OpenAPI状态机建模指南:用有限状态机设计RESTful API的终极方法 [特殊字符]

OpenAPI状态机建模指南&#xff1a;用有限状态机设计RESTful API的终极方法 &#x1f680; 【免费下载链接】OpenAPI-Specification The OpenAPI Specification Repository 项目地址: https://gitcode.com/gh_mirrors/op/OpenAPI-Specification OpenAPI Specification 是…...

kin-openapi版本迁移指南:从v0.x到v1.0的平滑升级

kin-openapi版本迁移指南&#xff1a;从v0.x到v1.0的平滑升级 【免费下载链接】kin-openapi OpenAPI 3.0 (and Swagger v2) implementation for Go (parsing, converting, validation, and more) 项目地址: https://gitcode.com/gh_mirrors/ki/kin-openapi kin-openapi是…...

3大技术突破重构macOS鼠标体验:Mac Mouse Fix深度解析

3大技术突破重构macOS鼠标体验&#xff1a;Mac Mouse Fix深度解析 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 核心痛点分析&#xff1a;mac…...

foobox-cn:让foobar2000焕发新生的界面美化方案

foobox-cn&#xff1a;让foobar2000焕发新生的界面美化方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 你是否厌倦了foobar2000单调的默认界面&#xff1f;是否希望在享受高品质音乐的同时&#…...

3D Face HRN效果验证:使用MeshLab量化评估3D重建PSNR与SSIM指标

3D Face HRN效果验证&#xff1a;使用MeshLab量化评估3D重建PSNR与SSIM指标 1. 项目背景与验证意义 3D人脸重建技术近年来取得了显著进展&#xff0c;但如何客观评估重建质量一直是个关键问题。传统的主观视觉评估方法存在明显局限性——不同观察者可能有不同的判断标准&…...

【Hung-yi Lee】《Introduction to Generative Artificial Intelligence》(6)

图片来自于 midjourney Introduction to Generative AI 2024 Spring 文章目录第11講&#xff1a;大型語言模型在「想」什麼呢&#xff1f; — 淺談大型語言模型的可解釋性&#xff08;24.05.03&#xff09;参考第11講&#xff1a;大型語言模型在「想」什麼呢&#xff1f; — 淺…...

Realistic Vision V5.1效果展示:这些惊艳的人像作品都是AI生成的

Realistic Vision V5.1效果展示&#xff1a;这些惊艳的人像作品都是AI生成的 1. 当AI画师遇上专业摄影师 你有没有见过这样的AI生成人像&#xff1f;皮肤纹理清晰到能看见毛细血管&#xff0c;发丝在阳光下呈现自然的半透明质感&#xff0c;眼神光的位置精准符合物理反射规律…...