首页 > 其他分享 >17-搜索结果处理-分页

17-搜索结果处理-分页

时间:2023-05-23 11:33:54浏览次数:47  
标签:10000 分页 17 翻页 查询 搜索 TOP1000 size

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。

elasticsearch中通过修改from、size参数来控制要返回的分页结果:

from:从第几个文档开始

size:总共查询几个文档

类似于mysql中的limit ?, ?

基本的分页

分页的基本语法如下:

深度分页问题

现在,我要查询990~1000的数据,查询逻辑要这么写:

  这里是查询990开始的数据,也就是 第990~第1000条 数据。不过,elasticsearch内部分页时,必须先查询 0~1000条,然后截取其中的990 ~ 1000的这10条:

查询TOP1000,如果es是单点模式,这并无太大影响。

但是elasticsearch将来一定是集群,例如我集群有5个节点,我要查询TOP1000的数据,并不是每个节点查询200条就可以了。因为节点A的TOP200,在另一个节点可能排到10000名以外了。因此要想获取整个集群的TOP1000,必须先查询出每个节点的TOP1000,汇总结果后,重新排名,重新截取TOP1000。

 

  那如果我要查询9900~10000的数据呢?是不是要先查询TOP10000呢?那每个节点都要查询10000条?汇总到内存中?当查询分页深度较大时,汇总数据过多,对内存和CPU会产生非常大的压力,因此elasticsearch会禁止from+ size 超过10000的请求。

针对深度分页,ES提供了两种解决方案,官方文档

(1)search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。

(2)scroll:原理将排序后的文档id形成快照,保存在内存。官方已经不推荐使用。

实现方案优缺点对比

(1)from + size

优点:支持随机翻页

缺点:深度分页问题,默认查询上限(from + size)是10000

场景:百度、京东、谷歌、淘宝这样的随机翻页搜索

(2)after search

优点:没有查询上限(单次查询的size不超过10000)

缺点:只能向后逐页查询,不支持随机翻页

场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

(3)scroll

优点:没有查询上限(单次查询的size不超过10000)

缺点:会有额外内存消耗,并且搜索结果是非实时的

场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。

补充

理解Search After的使用

es集群中数据是怎么分布的?

 

标签:10000,分页,17,翻页,查询,搜索,TOP1000,size
From: https://www.cnblogs.com/liaowenhui/p/17422647.html

相关文章

  • 图解LeetCode——剑指 Offer 36. 二叉搜索树与双向链表
    一、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。二、示例为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对......
  • FINC3017 Investments and Portfolio
    FINC3017InvestmentsandPortfolioManagementAssignment2:AnalyzingAnomaliesDue:11:59PM,15May2023Wordlimit:1500,excludingtables,figures,andreferences.ObjectiveTheobjectiveofAssignment2istoanalyzethesize,value,investment,andprofit......
  • jdk17 新增特性
    306:RestoreAlways-StrictFloating-PointSemantics/恢复始终严格的浮点语义356:EnhancedPseudo-RandomNumberGenerators/增强型伪随机数发生器382:NewmacOSRenderingPipeline/新的macOS渲染管道391:macOS/AArch64Port/macOS/AArch64平台支持398:Deprecatet......
  • iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型
    iOSMachineLearning系列(17)——几个常用的对象识别CoreML模型上一篇文章中,我们介绍了几个官方的图片分类的模型,图片分类模型的应用场景在于将图片中最主要的事物进行识别,在已有的词库中找到最可能得事物。而对象识别则要更高级一些。再之前的文章,我们介绍过可以使用官方提供的......
  • CF1770F 题解
    \(\text{link}\)。很困难的二进制计数。前置知识\(1\):范德蒙德卷积推广。即\(\sum\limits_{a_1+a_2+\dots+a_n=k,a_i\in\N}\prod\limits_{j=1}^n\dbinom{b_i}{a_i}=\dbinom{b_1+b_2+\dots+b_n}{k}\)。这里给一个组合意义的证明。\(RHS\)相当于在\(\sumb_i\)个物品中选......
  • NOIP2017普及组试题题解
    1.成绩原题:https://www.luogu.com.cn/problem/P3954代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;inta,b,c;intmain(){ cin>>a>>b>>c; cout<<a/10*2+b/10*3+c/10*5; return0;}解题思路:因为数据保证a,b,c都是10的......
  • linux查找文件内容 linux文件关键字搜索
    linux系统中,查看指定文件的指定内容,linux查找文件内容,linux文件关键字搜索:查找所有1.grep‘异常’catalina.out2.catcatalina.out|grep‘线程池计算当月理财余额异常’指定条件1.匹配行上下10行grep-10‘线程池计算当月理财余额异常’catalina.out2.匹配行前10行grep-B......
  • 对于手头正在使用输入法或者搜索类的软件产品评价
    百度产品。用户界面一个好的用户界面可以让用户更容易地掌握输入法或搜索类软件的功能,从而提高用户的效率。用户界面应该具有简单、易用、明确的特点,让用户一目了然地了解软件的功能和操作方法。同时,用户界面还应该具有美观、大方、简洁的特点,这样可以吸引用户的注意力,提高用户......
  • Java的Stream流的分页,Stream的skip和limit实现分页
    1、工具类packagecom.cc.testproject.utils;importcom.github.pagehelper.PageInfo;importorg.springframework.stereotype.Component;importjava.util.List;importjava.util.stream.Collectors;/**List分页工具类*@authorCC*@since2022/2/16**/@Compon......
  • 【杂文随笔】2017年总结 送自己一个字
    .......