ES6分页from+size、search_after两种查询

2023-05-16

1、from+size

//分页查询
@RequestMapping(value = "/get", method = RequestMethod.GET)
public BaseResponse<List<Object>> get(@RequestParam int from ,@RequestParam int size) {
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    //排序
    searchSourceBuilder.sort("timestamp", SortOrder.ASC);
    //筛选返回的字段,只要referer和clientip
    searchSourceBuilder.fetchSource(new String[]{"referer", "clientip"},null);
    searchSourceBuilder.from(from*size);
    searchSourceBuilder.size(size);
    SearchResponse response = transportClient.prepareSearch("kibana_sample_data_logs").setTypes("_doc")
            //设置查询类型java
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .setSource(searchSourceBuilder)
            .get();
    SearchHits hits = response.getHits();
    Map<String, String> map = new HashMap<>();
    for(int i=0;i<hits.getHits().length;i++) {
        Map<String, Object> sourceAsMap = hits.getHits()[i].getSourceAsMap();
        System.out.println(JSONObject.toJSONString(sourceAsMap));
        map.put(hits.getHits()[i].getId(),hits.getHits()[i].getIndex());
    }
    return BaseResponse.ok(map);
}


建议:避免过度使用 from 和 size 来分页或一次请求太多结果,深度分页问题。

注意:max_result_window默认10000,分页查询超过10000会报错,可以修改这个值(不建议)

2、search_after

@RequestMapping(value = "/searchAfter", method = RequestMethod.GET)
    public BaseResponse<List<Object>> searchAfter(@RequestParam int size,
                                                  @RequestParam Long searchAfter) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //排序字段
        searchSourceBuilder.sort("timestamp", SortOrder.ASC);
        //筛选返回的字段,只要referer和clientip
        searchSourceBuilder.fetchSource(new String[]{"referer", "clientip"}, null);
        //上一页最后数据sort值,这个参数应该是个数组,数组的个数与排序字段个数一致,必填字段,首页时为-1,
        searchSourceBuilder.searchAfter(new Object[]{searchAfter});
        //不用传,默认0
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(size);
        SearchResponse response = transportClient.prepareSearch("kibana_sample_data_logs").setTypes("_doc")
                //设置查询类型java
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setSource(searchSourceBuilder)
                .get();
        SearchHits hits = response.getHits();
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < hits.getHits().length; i++) {
            Map<String, Object> sourceAsMap = hits.getHits()[i].getSourceAsMap();
            System.out.println(JSONObject.toJSONString(sourceAsMap));
            map.put(hits.getHits()[i].getId(), hits.getHits()[i].getIndex());
        }
        //这个值就是排序字段sort值,需要返回,下一页请求时带过来
        map.put("searchAfter",String.valueOf(Arrays.stream(hits.getHits()[hits.getHits().length-1].getRawSortValues()).findFirst().get()));
        return BaseResponse.ok(map);
    }

对比:

from size,深度分页或者size特别大的情况,会出深度分页问题,max_result_window也会阻预设的查询。

search_after: 性能优秀,是分页的优化。

深度分页问题可以从业务上想办法避免是最好的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6分页from+size、search_after两种查询 的相关文章

  • 键入字符时搜索字符串

    我的手机中存储了联系人 假设我的联系人是 Ram Hello Hi Feat Eat At 当我打字时 A 我应该得到所有匹配的联系人说 Ram Feat Eat At 现在我再输入一个字母T 现在我的总字符串是 AT 现在我的程序应该重用
  • WordPress 搜索栏仅输出帖子标题

    我想用 PHP 创建一个 Wordpress 搜索栏 仅显示在我网站的一页中 我正在开发一个我制作的新主题 因此 搜索栏应该只输出与搜索关键字相关的我的帖子的永久链接 标题 我现在遇到的问题是搜索输出显示 lorem ipsum 文本和侧边
  • 斐波那契搜索

    有人请解释一下斐波那契搜索算法 我尝试了很多资源并进行了很多搜索 但算法仍然不清楚 大多数资源都在与二分搜索的链接中描述了它 但我不明白它们 我知道斐波那契搜索算法是二分搜索的扩展 我对此非常了解 我的书也未能解释 我知道斐波那契数定义为
  • 二叉搜索树过滤某个范围内的值

    我有一棵由 N 个元素组成的树 RBT 假设我有这棵树 N 7 4 2 6 1 3 5 7 如何以比 O N 更好的性能过滤某个范围内的值 例如打印 3 到 6 之间的所有值 有具体的算法吗 我想象它类似于找到值 3 log N 的位置 以
  • 有没有办法在初始化后使用谓词修改获取的结果?

    我正在尝试为现有 CoreData 应用程序 简单的日志记录应用程序 构建搜索视图 我将所有数据存储在 CoreData 中 并使用 FetchRequest State private var searchPredicate NSPred
  • 以编程方式搜索 GMail?

    有没有什么方法可以以编程方式搜索 GMail 最好使用 C 例如 我想获取与搜索匹配的所有电子邮件标签 MyLabel 来自 电子邮件受保护 cdn cgi l email protection 以便我可以根据需要解析电子邮件正文 我发现的
  • 寻找有关 Jeff 幻灯片中介绍的“Group varint 编码/解码”的更多详细信息

    我注意到 Jeff 的幻灯片 构建大规模信息检索系统的挑战 也可以在这里下载 http research google com people jeff WSDM09 keynote pdf http research google com
  • 检查文件中是否存在所有多个字符串或正则表达式

    我想检查一下是否all我的字符串存在于文本文件中 它们可以存在于同一行或不同行上 部分匹配应该没问题 像这样 string1 string2 string3 string1 string2 string1 string2 string3 s
  • 字符串驻留和文字字符串声明的搜索成本

    两个问题 当我们声明文字字符串时 我们会在堆的字符串池中查找是否有相同的字符串 这也是实习吗 班级的方法实习生String 在我看来 每个文字字符串声明都需要进行二分搜索或其他操作 因此它至少需要花费log n when n是池中现有字符串
  • Lucene 搜索具有特定字段的文档?

    Lucene Net 有没有办法查询包含特定字段的文档 假设我的一些文档有 食物 字段 而有些则没有 我想找到所有包含字段 foo 的文档 无论 foo 的值是什么 我该怎么做呢 它是某种 TermQuery 吗 尝试 foo TO 应该适
  • 拥有带有路径的地图如何将其与给定路径进行比较?

    我们有到字符串对的升压路径映射 例如名称 位置 绝对位置路径a lausr myfolder 我们得到了一些位置a lausr myfolder mysubfolder myfile 如何找到哪个地图位置最适合给定的网址 例如 我们有一张地
  • 如何按名称查找 Eclipse 项目和文件夹?

    有没有办法在 Eclipse 工作区中按名称搜索文件夹 项目 结果最好在我可以执行批量操作 例如关闭 打开 分配工作集 的视图中返回 手动点击数百个项目的列表实在是太麻烦了 这个看似微不足道的任务让我感到悲伤 在我经历了这么多年的日食之后
  • 如何在 Orchard CMS 上使用 lucene 查询语法

    我想使用完整的Lucene 查询语法 http lucene apache org core 2 9 4 queryparsersyntax html在基于 Orchard CMS 的网站上 目前 启用后索引和搜索 http docs or
  • 使用批量/更新方法将“标签”应用于数百万个文档

    我们的 ElasticSearch 实例中有大约 55 000 000 个文档 我们有一个带有 user ids 的 CSV 文件 最大的 CSV 有 9M 个条目 我们的文档以 user id 作为键 所以这很方便 我发布这个问题是因为我
  • Mysql Codeigniter Active Record - 如何执行 where_in 查询并返回正确的结果顺序?

    我有一组按特定顺序传递的 ID 需要保留 我正在从几个左连接查询与每个 ID 相关的数据 ID 是从搜索中返回的 因此必须保持顺序以使结果有效 否则搜索变得毫无意义 我的代码看起来像这样 this gt db gt where in id
  • 如何在手机SD卡或其他位置搜索文件

    我想搜索用户移动设备上具有特定扩展名的文件 我尝试搜索但找不到任何直接的 API 是否有特定的 API 或者是否有实现相同目的的繁琐方法 或者是否有一种机制可以调用 linux 调用 find 或类似的东西 Thanks boolean i
  • Python - “in”语句搜索对象列表的速度很慢

    我希望有人能解释为什么搜索对象引用列表比搜索普通列表慢得多 这是使用 python in 关键字进行搜索 我认为它以 C 编译器 速度运行 我认为列表只是对象引用 指针 的数组 因此搜索应该非常快 两个列表在内存中的大小正好是 412236
  • 列表视图过滤器 Android

    我在android中创建了一个列表视图 我想在列表上方添加编辑文本 当用户输入文本时 列表将根据用户输入进行过滤 谁能告诉我是否有办法在android中过滤列表适配器 在列表视图的 xml 布局文件中添加一个 EditText 在你的活动
  • LdapConnection SearchRequest 抛出对象不存在错误

    我正在尝试查询 LDAP 服务器以查找 LDAP 用户并将其导入到我的系统中 但是 当我尝试执行此操作时 请求会抛出DirectoryOperationException 说The object does not exist ldapCon
  • 如何在elasticsearch中配置synonym_path

    我对 elasticsearch 很陌生 我想使用同义词 我在配置文件中添加了这些行 index analysis analyzer synonym type custom tokenizer whitespace filter synon

随机推荐

  • vscode配置C环境

    vscode配置C环境 最近感觉基础不太行 xff0c 想重新看下数据结构 xff0c 用c语言重新写一下经典的结构 也不想换编辑器 xff0c 就想用vscode xff0c 刚好github上有一个一键配置c环境的工具 记录一下 配置c
  • 【光线追踪系列一】PPM输出;自定义vec3;光线、简单相机及天空采样

    本次光线追踪系列从基础重新开始 xff0c 主要参照 Ray Tracing in One Weekend xff0c 具体实现代码框架见 https github com RayTracing raytracing github io 本
  • 服务器总线协议_第一章----I2C总线协议入门

    目录 一 概述 二 首先了解一下I2C的I O结构 三 其次了解一下I2C的时序 第一部分 xff1a 起始停止信号简介 第二部分 xff1a I2C的时序部分要求 第三部分 xff1a I2C的一帧数据的格式 四 最终问与答 1 xff0
  • 服务器总线协议_第二章----I2C总线协议进阶

    敬请期待 xff0c 预计8月1日发布 xff0c 需要请加个关注
  • 服务器总线协议_第三章----SVID电源管理协议

    目录 一 概述 二 SVID协议组成方式 三 SVID协议拓扑要求 四 SVID如何判别读写 Master读操作 Master写操作 五 问与答 1 xff09 SVID有没有特殊的要求 xff1f 一 概述 首先先了解一下SVID的全称
  • PM_Sync的作用

    目录 一 先来了解一下PM Sync的全称 xff1a 一 PM Sync简介 PM Sync xff1a Power Management synchronization 同步电源管理 在知道这个信号的作用之前需要先来了解一下 ADR 二
  • si4438使用stm32f103配置调试成功!

    刚拿到si4438时候在网上找了一大波资源 xff0c 发现能使用的并没有多少 xff0c 于是自己配置一发 经过不懈努力配置成功 xff0c 现在将一些配置过程分享给大家 xff01 源码已上传 尽情下载 xff01 1 首先打开工程文件
  • 教你如何使用stm32发送一帧数据(结构体中的数据)

    在这篇文章中我介绍一下如何通过串口发送一帧存在结构体中的数据 通过串口接受一帧数据请参考的我博客中的文章 教你如何使用stm32接收一帧数据 xff01 一 xff1a 在 h首先定义一个结构体 typedef struct uint8 t
  • 浅谈线性稳压电源和开关稳压电源(开关电源)

    目前现有电源主要分为两大类 xff1a 线性稳压电源和开关稳压电源 xff08 开关电源 xff09 线性稳压电源 线性稳压电源经过变压 整流 滤波 稳压实现电源稳压 优点 xff1a 稳定性好 xff0c 瞬态响应速度快 xff0c 可靠
  • c++ #define 用法

    1 用于表示将两个参数连在一起 xff0c 其中宏的 前后空格会被省略 define CONNA a b a b define CONNB a b a b int main string a 61 CONNA 34 one 34 34 tw
  • MySQL第五课 Table has no partition for value

    场景 MySQL由于安全性要求 xff0c 版本升级之后 xff0c 执行插入数据出现Table has no partition for value 错误 已有版本5 7 20 log升级到5 7 26 log 说明 建表过程中 xff0
  • DSP数据安全平台

    数据安全平台 xff08 DSP xff0c Data Security Platforms xff09 的概念来源于Gartner的 2021数据安全技术成熟度曲线 xff0c DSP定义为以数据安全为中心的产品和服务 xff0c 旨在跨
  • c++ 数学库

    链接 link
  • vscode使用restClient实现各种http请求

    vscode使用restClient实现各种http请求 一 xff0c 安装插件 首先 xff0c 我们要在vscode的扩展中 xff0c 搜索rest Client xff0c 然后安装它 xff0c 这里我已经安装过了 安装后 xf
  • K210和STM32串口通信(亲测有效)

    声明 最近想做一个K210数字识别和寻迹 xff0c 方便完成2021年电赛F题 xff0c 完成了数字训练和脱机运行就想赶紧进行一次通信 xff0c 调了好几天 郁闷 xff0b 自闭几天 按照官方的历程看 xff0c 配置的没问题但是会
  • 简单Rabbitmq 发送消息和接收消息

    简单Rabbitmq 发送消息和接收消息 1 先在Rabbitmq配置文件中预先创建好交换器 xff0c 队列 xff0c 路由等信息 2 创建生产者发送消息 64 Autowired private RabbitTemplate rabb
  • Elasticsearch(ES6)------(4) ES设置用户名密码访问

    Elasticsearch ES xff08 1 xff09 下载 安装 43 kibana 下载 xff08 2 xff09 本机多节点启动 43 ElasticSearch head插件使用 xff08 3 xff09 索引 文档概念和
  • Elasticsearch(ES6) --根据条件修改字段值

    POST index name doc update by query 34 query 34 34 match 34 34 version 34 34 12 22 34 34 script 34 34 inline 34 34 ctx s
  • redis限流使用lua脚本

    lua脚本 xff0c 计数器限流 5秒内限流10次 64 param key 64 return public boolean acquire String key long now 61 System currentTimeMillis
  • ES6分页from+size、search_after两种查询

    1 from 43 size 分页查询 64 RequestMapping value 61 34 get 34 method 61 RequestMethod GET public BaseResponse lt List lt Obje