Elasticsearch 中获取返回匹配记录总数

第一步:准备包裹内容(构建查询条件)

复制代码
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("group_id", groupId));
boolQueryBuilder.must(QueryBuilders.termQuery("valid", true));
  • 动作QueryBuilders.boolQuery()
  • 意义:创建一个"查询条件容器"。就像拿一个空的快递箱。
  • 动作.must(...)
  • 意义 :往箱子里放具体的条件。
    • termQuery("group_id", groupId):要求 group_id 字段必须等于某个值(精准匹配)。
    • termQuery("valid", true):要求 valid 字段必须为 true
  • 总结 :这一步是在组装逻辑,告诉 ES 我们要找什么样的数据(既要属于某分组,又要有效)。

第二步:打包封箱(封装查询体)

复制代码
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
  • 动作new SearchSourceBuilder()
  • 意义 :拿出一张快递单模板
  • 动作.query(...)
  • 意义 :把刚才装好条件的"箱子"(boolQueryBuilder)贴在这张单子上。
  • 总结 :这一步是把查询条件转换成 ES 能看懂的JSON 格式 (Source)。SearchSourceBuilder 还可以加其他东西,比如分页(from/size)、排序(sort),但这里我们只用了查询。

第三步:填写收件地址(创建请求对象)

复制代码
CountRequest countRequest = new CountRequest(ArchivesGlobalConstant.PROFILE_INDEX_NAME);
countRequest.source(searchSourceBuilder);
  • 动作new CountRequest(...)
  • 意义 :准备一个专门用来"数数"的信封 ,并写上索引名(去哪个库房查)。
  • 动作.source(...)
  • 意义 :把刚才填好的"快递单"(searchSourceBuilder)塞进这个信封里。
  • 总结 :这一步确定了去哪里查 (索引名)和查什么(具体的查询体)。

第四步:发货并等待回执(执行请求)

复制代码
CountResponse response = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
return response.getCount();
  • 动作restHighLevelClient.count(...)
  • 意义:叫来快递员(HTTP 客户端),把信封发给 ES 服务器。
  • 动作response.getCount()
  • 意义:快递员回来了,手里拿了个小纸条,上面写着数字几就是几。
  • 总结 :这一步是网络传输结果解析。ES 收到请求后,会扫描数据,统计匹配的文档数量,然后把数字返回。

简单模式(如果只是查个全表总数)

场景 :不需要任何条件,就是想知道一个索引里总共有多少条数据。
特点 :可以不用构建复杂的 SearchSourceBuilder,直接发请求。

复制代码
// 只需要这一行核心代码,不需要包装 Query
CountRequest countRequest = new CountRequest("your_index_name");
CountResponse response = client.count(countRequest, RequestOptions.DEFAULT);
long count = response.getCount();
相关推荐
独自破碎E15 分钟前
BISHI75 阶幂
android·java·开发语言
卓越软件开发20 分钟前
毕设全栈开发一条龙:Java/SpringBoot/Vue/ 小程序 / Python / 安卓 / AI 图像识别 人脸检测 车牌识别 YOLO
开发语言·spring boot·python·yolo·小程序·毕业设计·课程设计
一叶之秋141224 分钟前
千面之法: 释放 C++ 多态的灵活威力
开发语言·c++
柒.梧.26 分钟前
Java拷贝精讲:彻底分清浅拷贝与深拷贝
java·开发语言·python
一晌小贪欢29 分钟前
PyQt5 实战:批量图片添加水印工具(带右侧实时预览)(附代码及下载链接)
开发语言·qt·添加水印·图片添加水印·蹄片水印
超绝振刀怪31 分钟前
【C++ vector】
开发语言·c++
机器视觉的发动机32 分钟前
图像处理-机器视觉算法中的数学基础
开发语言·人工智能·算法·决策树·机器学习·视觉检测·机器视觉
guohahaya33 分钟前
attention-2026
开发语言·c#
lntu_ling4 小时前
Python-基于Haversine公式计算两点距离
开发语言·python·gis算法
ShineWinsu9 小时前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承