Elasticsearch(四)深分页Scroll

2023-09-17 21:55:29

一、前言

1.1、scroll与from+size区别

ES对于from+size的个数是有限制的,二者之和不能超过1w。当所请求的数据总量大于1w时,可用scroll来代替from+size。

from+size在ES查询数据的方式步骤如下:

1、先将用户指定的关键字进行分词;
2、将词汇去分词库中进行检索,得到多个文档的id;
3、去各个分片中拉取指定的数据,相对耗时较长;
4、将数据根据score进行排序,耗时相对较长;
5、根据from,size的值,截取满足条件的查询到的数据;
6、返回结果;

优点:每次都能获取到最新的记录;
缺点:同一个查询,展示另一页的from+size时,以上步骤需要再来一遍;

scoll+size在ES查询数据的方式:

1、先将用户指定的关键字进行分词;
2、将词汇去分词库中进行检索,得到多个文档的id;
3、将文档的id存放在内存的一个ES的上下文中;
4、根据你指定的size的个数去ES上下文中检索指定个数的数据,拿完了数据的文档id,会从上下文中移除;
5、如果需要下一页数据,直接去ES的上下文中,找后续内容;
6、循环第4步,第五步,直到数据都取完了;
优点:数据缓存进了内存,速度快,同一个查询,展示另一页的scoll+size时,只需要循环4,5步;
缺点:冷加载,不适合做实时,当数据更新时,内存中的上下文id数据不会更新;

1.2、Scroll原理

1.2.1、 ES搜索两阶段简介

ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。

Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。

Fetch阶段比较重,需要将每个shard的结果取回,在协调结点进行全局排序。 通过From+size这种方式分批获取数据的时候,随着from加大,需要全局排序并丢弃的结果数量随之上升,性能越来越差。

1.2.2、 scroll分析

Scroll查询,先做轻量级的Query阶段以后,免去了繁重的全局排序过程。 它只是将查询结果集,也就是doc id列表保留在一个上下文里, 之后每次分批取回的时候,只需根据设置的size,在每个shard内部按照一定顺序(默认doc_id续), 取回这个size数量的文档即可。

1.2.3、 scroll使用场景

可以看出scroll不适合支持那种实时的和用户交互的前端分页工作,其主要用途用于从ES集群分批拉取大量结果集的情况,一般都是offline的应用场景。 比如需要将非常大的结果集拉取出来,存放到其他系统处理,或者需要做大索引的reindex等等。

二、Scroll实践

2.1、依据fee字段和moblie字段倒序按照每一页2条scroll查询公司信息

2.1.1、RESTful 代码
2.1.1.1、步骤1 scoll 查询,返回第一页数据,将ES的id存放在上下文中

参数scroll=2m表示scroll查询的上下文在内存中存放2分钟,不指定默认生存时间为0,当超时,会自动删除上下文,则下面的步骤2和3会查询报错
指定size为2
scroll可以指定字段排序,默认按照文档id排序

POST /notice_procurement/_search?scroll=2m
{
  "query": {
    "match_all": {}
  }, 
  "size": 2, 
  "sort": [
    {
      "scale": {
        "order": "desc"
      }
    }
  ]
}

//---返回

    "_scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHBZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3",
    "took": 2,
    "timed_out": false
2.1.1.2、步骤2 根据scroll查询下一页数量,再下一页的话再执行下此语句,再下一页再再执行,直到结束或超时;

scroll_id: 指的是上面的查询结果
scroll: 还是要继续指定上下文在内存中缓存2分钟

POST /_search/scroll
{
  "scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHRZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3",
  "scroll": "2m"
}

2.1.1.3、 删除scroll在es上下文中的数量

可能我查到第一页就知道了结果,对后面的分页不感兴趣了,我想提前删除scroll中的上下文

DELETE /_search/scroll/FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHRZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3

更多推荐

C语言——贪吃蛇小游戏

目录一、ncurse1.1为什么需要用ncurse:1.2ncurse的输入输出:1.2.1如何使用ncurse:1.2.2编译ncurse的程序:1.2.3测试输入一个按键ncurse的响应速度:1.3ncurse上下左右键获取:1.3.1如何查看宏定义的.h文件:1.3.2ncurse上下左右键获取:二、地图规划2

github一些有趣的使用场景和基本使用方法

文章目录github的使用入门安装Git创建GitHub帐户在本地设置Git克隆仓库进行修改和提交推送更改拉取更新删除Github上废弃的仓库注意github更多有趣的使用场景协作和社交编程文档和知识库学习和教育自动化工作流程数据科学和可视化用来写blogGitHubPagesJekyllHexo第三方集成开发者简历插

eNSP网络学习

一、eNSP1.什么是eNSPeNSP(EnterpriseNetworkSimulationPlatform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台,主要对企业网络路由器、交换机进行软件仿真,完美呈现真实设备实景,支持大型网络模拟,让广大用户有机会在没有真实设备的情况下能够模拟演练,学习网络

ELK部署

一,elk提供了一个分布式多用户能力的全文搜索分析引擎,能对各种类型的数据进行近实时的索引和查询,支持高可用和水平扩展性。作用:1.将日志进行集中化管理2.将日志格式化_(ogstash)并输出到Elasticsearch3.对格式化后的数据进行索引和存储(Elasticsearch)4.前端数据的展示(Kibana)

使用自定义XML配置文件在.NET桌面程序中保存设置

本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。1.背景在.NET桌面程序中,通常使用

Quartz.NET,强大的开源作业调度框架

Quartz.NET是一个强大的开源作业调度框架,专为C#和.NET开发而设计。它允许开发人员在应用程序中调度、执行和管理各种类型的作业,例如定时任务、后台作业、周期性作业等。Quartz.NET具有高度可配置性和灵活性,可以满足各种复杂的调度需求。**作用:**Quartz.NET的作用在于简化作业调度的实现并提供可

高防CDN如何保护电商平台的在线支付系统安全

高防CDN如何保护电商平台的在线支付系统安全?随着移动互联网的快速发展,越来越多的用户选择在手机上进行购物和支付。这种形式的便利性和灵活性推动了电商平台的发展,但同时也给电商平台的安全带来了新的挑战。尤其是在线支付系统,由于其涉及用户的金融信息,成为黑客攻击的重点目标。为了保护电商平台的在线支付系统安全,选择合适的高防

案例实践丨基于SkyWalking全链路监控的微服务系统性能调优实践篇

1背景随着开源社区和云计算的快速推进,云原生微服务作为新型应用系统的核心架构,得到了越来越广泛的应用。根据Gartner对微服务的定义:“微服务是范围狭窄、封装紧密、松散耦合、可独立部署且可独立伸缩的应用程序组件。”微服务之父,马丁.福勒,对微服务概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常

Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

Unity开发人员的城堡游戏引擎概述一、简介2.Unity相当于什么GameObject?3.如何设计一个由多种资产、生物等组成的关卡?4.在哪里放置特定角色的代码(例如生物、物品)?Unity中“向GameObject添加MonoBehaviour”相当于什么?5.Unity子目录相当于什么Assets?6.支持哪些

git基本使用

一、Git简介Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。1.版本控制的三个阶段版本控制

深度解析Java虚拟机(JVM)的垃圾回收机制

AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Python面试题2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、A

热文推荐