es分页查询

embedded/2025/1/13 15:05:49/

ES(Elasticsearch)分页查询通常使用 fromsize 参数来控制查询结果的分页。from 用于指定从哪个结果开始,size 用于指定返回多少条记录。

示例查询

假设你想查询 my_index 索引,并且希望分页获取数据:

json

GET /my_index/_search { "from": 0, "size": 10, "query": { "match_all": {} } }

参数解释:

  • from: 表示从第几条记录开始(默认为0,表示从第一条开始)。
  • size: 表示每页返回多少条记录。

分页逻辑:

  • 第一页:from = 0size = 10(返回从0到9的记录)。
  • 第二页:from = 10size = 10(返回从10到19的记录)。
  • 第三页:from = 20size = 10(返回从20到29的记录)。

注意事项:

  1. 当你分页查询时,如果数据量非常大,建议使用search_after进行深分页,它比from/size更高效。
  2. from 和 size 使用时会增加查询的开销,特别是在大数据集上。

from size

    public List<ResFoodOrderInspectionVO> queryGroupByOrgGroupLocationCode(ReqFoodOrderInspectionVO reqVO) {log.info("食用订单巡检表查询条件:{}", reqVO.toString());StopWatch stopwatch = new StopWatch();stopwatch.start();List<ResFoodOrderInspectionVO> resList = Lists.newArrayList();SearchRequest searchRequest = new SearchRequest(EsOperateTables.FOOD_ORDER_INSPECTION_V2.getAlias());SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.fetchSource(RES_FBASEFOODORDERINSPEC_FIELDS, null);
//        searchSourceBuilder.size(0);// 设置为0代表不需要取查询到的所有数据,只需要取聚合的相关的数据searchSourceBuilder.size(reqVO.getSize());searchSourceBuilder.from((reqVO.getPage() - 1) * reqVO.getSize());BoolQueryBuilder booleanQuery = QueryBuilders.boolQuery();// 组装查询条件buildBooleanQuery(booleanQuery, reqVO);searchSourceBuilder.query(QueryBuilders.constantScoreQuery(booleanQuery));// 分组,统计,排序FoodOrderInspectionConvertor.groupCountAgg(searchSourceBuilder, reqVO, foodOrderInspectionDisabled);searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = null;try {searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);stopwatch.stop();} catch (IOException e) {log.error(ErrorMsgConstant.FOODORDERINSPECTION_QUERYES_ERROR, e);throw new OrderCenterException(ErrorMsgConstant.FOODORDERINSPECTION_QUERYES_ERROR);}if (Objects.isNull(searchResponse)) {return Collections.emptyList();}Terms terms = searchResponse.getAggregations().get(FoodOrderInspectionConstant.GROUPDIMENSION);if (Objects.isNull(terms)) {return Collections.emptyList();}// 包含门店,且按日统计时,需要判断总量,其他场景,总分组量实际不会大于10000,不需要判断if (CollectionUtils.isNotEmpty(reqVO.getLocationCodes()) && !reqVO.getGroupMonth() && searchResponse.getHits().getTotalHits() > FoodOrderInspectionConstant.GROUP_RETURN_SIZE) {throw new OrderCenterException(ErrorMsgConstant.GROUP_TOTALSIZE_TOOLONG);}// 组装数据for (Terms.Bucket entry : terms.getBuckets()) {resList.add(FoodOrderInspectionConvertor.toResVO(entry, reqVO));}// 取聚合统计后合计Map<String, Aggregation> totalMap = searchResponse.getAggregations().getAsMap();resList.forEach(v -> {v.setResFoodOrderInspectionTotalVO(FoodOrderInspectionConvertor.buildTotal(totalMap));});log.info("食用订单巡检报表查询耗时:{}", stopwatch.getTotalTimeMillis());return resList;}}

searchAfter

    private SearchRequest buildSearchRequest(EsSchemel esSchemel, QueryBuilder params, int pageSize, String orderBy, String scrollId) {if (pageSize > 10000) {//fixed:es error,from + size must be less than or equal to: [10000]pageSize = 10000;}SearchRequest searchRequest = new SearchRequest(esSchemel.getIndex());searchRequest.types(esSchemel.getType());SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(params);//sourceBuilder.from(pageNo - 1);sourceBuilder.size(pageSize);sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));if (esSchemel.getSelectCols() != null && esSchemel.getSelectCols().length > 0) {//性能参数,减少iosourceBuilder.fetchSource(esSchemel.getSelectCols(), EXCLUDEFIELDS);}if (!Strings.isNullOrEmpty(orderBy)) {sourceBuilder.sort(new FieldSortBuilder(orderBy).order(SortOrder.DESC));if (!Strings.isNullOrEmpty(scrollId)) {sourceBuilder.searchAfter(new Object[]{scrollId});}}searchRequest.source(sourceBuilder);return searchRequest;}


http://www.ppmy.cn/embedded/153583.html

相关文章

Kafka-go语言一命速通

记录 命令&#xff08;终端操作kafka) # 验证kafka是否启动 ps -ef | grep kafka # ps -ef 命令用于显示所有正在运行的进程的详细信息 lsof -i :9092# 启动kafka brew services start zookeeper brew services start kafka# 创建topic kafka-topics --create --topic test --p…

2024信息安全网络安全等安全意识(附培训PPT下载)

信息安全和网络安全是现代社会中至关重要的领域&#xff0c;它们涉及保护数据、系统和网络免受未经授权的访问、破坏和滥用。以下是一些关键的安全意识和概念&#xff1a; 信息安全意识 数据保护&#xff1a;意识到个人和组织数据的敏感性和价值&#xff0c;采取措施保护数据…

【Rust自学】12.1. 接收命令行参数

12.1.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数&am…

MATLAB安装Robotics Toolbox(机器人工具箱)插件

一、下载工具箱安装包http://petercorke.com/wordpress/toolboxes/robotics-toolbox 二、将文件夹放到MATLAB安装文件夹指定目录下 三、打开MATLAB&#xff0c;主页------设置路径-----选添加并包含子文件夹-------选择这个rvctools文件夹save&#xff08;保存&#xff09;-clo…

软件项目管理软件实现步骤

一、明确需求 在开发项目管理软件前&#xff0c;首先要明确用户的需求&#xff0c;软件管理软件的用户包括项目经理、团队成员、顾客等&#xff0c;他们的需求可能不相同。通过调研或者访谈的方式&#xff0c;了解用户的实际需求。 问卷调查&#xff1a;通过问卷的方式&#…

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…

深度学习与机器学习的关系和差别?

深度学习与机器学习既有紧密的联系&#xff0c;又存在明显的差别&#xff1a; 关系 深度学习是机器学习的分支&#xff1a;机器学习是一门多领域交叉学科&#xff0c;旨在让计算机通过数据学习模式&#xff0c;并利用这些模式进行预测或决策。深度学习则是机器学习中的一个特…

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码&#xff0c;介绍代码逻辑和代码实现。 主要实现功能&#xff1a;根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal&#xff0c;…