首页 > 其他分享 >Elasticsearch,使用scroll实现遍历(分页)查询

Elasticsearch,使用scroll实现遍历(分页)查询

时间:2024-04-08 10:33:21浏览次数:23  
标签:遍历 快照 请求 scroll Elasticsearch 查询 数据 id

为什么要使用 scroll 查询

在使用 es 中,当某个 index 存贮的数据超过 10000 时,只能查询到 10000 的数据。因为 index.max_result_window 默认值是 10000。并且使用游标查询可以在一次查询中获取大量文档,并且保持查询快照状态,允许用户多次检索数据而不影响其他并发请求。

scroll 查询的主要意义

  1. 处理大量数据:大量导出数据、批量处理数据等。
  2. 避免深度分页问题:普通分页可能会导致性能下降,当分页数量增加,跳过文档增加,性能也会降低。而 scroll 避免此问题。
  3. 快照保存:游标保持一个快照状态,允许用户在快照有效期内多次滚动检索,提高效率。
  4. 数据一致性:游标查询可以确保整个查询结果的一致性,即使在处理大量文档时,也不会错过新增或删除的文档。

如何使用 scroll 对 es 进行查询(python 示例)

第一步

进行GET请求查询,返回结果中会多一个scroll_id,该id是有时效性。

GET demo/_search?scroll=1m
{
  "query": {
    "match_all": {}
  }
}
第二步

将请求体中修改成scroll和scroll_id的形式,请求内容会根据第一次请求。

GET demo/_search/scroll
{
   "scroll":"1m",
   "scroll_id":[scroll_id]
}

返回一个新的scroll_id,作为下一次请求参数。

第三(n)步

如同第二步,不过每一次都要把上一次请求返回的的scroll_id作为下一次的参数。
所以在代码中可以使用循环来获取所有数据。
当数据请求完成后,就结束循环。

标签:遍历,快照,请求,scroll,Elasticsearch,查询,数据,id
From: https://www.cnblogs.com/G-Sucker/p/18120545

相关文章

  • 二叉树的非递归遍历
    感谢b站up主优雅的代码:https://space.bilibili.com/95715842二叉树的非递归遍历非递归的先序遍历思想:利用栈先进后出的性质。将根节点入栈,(根节点出栈的同时先拉右子树入栈,之后拉左子树入栈;左子树出栈的同时先拉其右子树入栈);依次继续。voidpreOrder(TreeNode*root){......
  • elasticsearch mapping
    1 概念:​ ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。分词器、评分等概念在......
  • bs4的使用 遍历文档树
     bs4的使用#遍历文档树#搜索文档树(5种过滤规则)#limit和recursive参数importrequests#pip3installbeautifulsoup4解析html和xml,修改html和xmlfrombs4importBeautifulSoup#res=requests.get('https://www.autohome.com.cn/news/1/#liststart')##withop......
  • Elasticsearch 认识分词(1)
    一.概述分词是构建倒排索引的重要一环。根据语言不同可以分为英文分词、中文分词等;根据分词实现的不同又分为标准分词器、空格分词器、停用词分词器等。在传统的分词器不能解决特定业务场景的问题时,往往需要自定义分词器。1.1认识分词对于分词操作来说,英语单词......
  • Elasticsearch-定制分词器
    一、内置分词器分词步骤1).characterfilter:在一段文本进行分词之前,先进行预处理,eg:最常见的过滤html标签(hello->hello),&->and(I&you->Iandyou)2).tokenizer:分词,eg:helloyouandme->hello,you,and,me3).tokenfilter:一个个小单词标准化转换lower......
  • 图的遍历试题解析
    一、单项选择题01.下列关于广度优先算法的说法中,正确的是(A ).Ⅰ.当各边的权值相等时,广度优先算法可以解决单源最短路径问题Ⅱ.当各边的权值不等时,广度优先算法可用来解决单源最短路径问题Ⅲ.广度优先遍历算法类似于树中的后序遍历算法Ⅳ.实现图的广度优先算法时,使用的......
  • 18天【代码随想录算法训练营34期】● 513.找树左下角的值 ● 112. 路径总和 113.路径
    513.找树左下角的值#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deffindBottomLeftValue(self......
  • 二叉树-迭代遍历
    递归的实现是每次递归调用都把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候就从栈顶弹出上一次递归的各项参数。可利用栈实现二叉树的前中后序遍历。前序遍历前序遍历是中左右的顺序,整体过程就是逐次访问父节点,压入右孩子再压入左孩子,由于访问的节点和待......
  • 2.手写JavaScript广度和深度优先遍历二叉树
    一、核心思想:1.深度遍历:依靠栈先进后出的机制,分别设置返回结果的数组和栈数组,首先判断栈非空,对每个结点,将其出栈并把值push到结果数组,判断是否有右左孩子,分别将其加入栈中,循环执行上述操作。否则返回结果数组。2.广度遍历:依靠队列先进先出的机制,分别设置返回结果的数组和队......
  • 二叉树-递归遍历
    深度优先遍历先往深走,遇到叶子结点再往回走,分为前序遍历,中序遍历和后序遍历。方法有递归法和迭代法。前中后序遍历,指的是中间节点的遍历顺序。前序遍历:5412678中左右中序遍历:1425768左中右后序遍历:1247865左右中深度优先遍历可利用递归法或者迭代法实......