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();
相关推荐
观无11 分钟前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)13 分钟前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
我不是疯子是傻子27 分钟前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆36 分钟前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
霸道流氓气质1 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
Patrick在香港1 小时前
Python正则表达式实战:解析和验证香港身份证、车牌、电话格式
开发语言·python·正则表达式
路溪非溪2 小时前
Python语言的执行流程总结
开发语言·python
民乐团扒谱机2 小时前
【超详解】量子克拉美罗下界QCRB:时延估计精度极限推导+MATLAB多场景绘图实战
开发语言·机器学习·matlab·量子力学·qcrb
乐观勇敢坚强的老彭2 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
离陌在学C#3 小时前
C# 泛型:从基础到高级应用
开发语言·c#