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();
相关推荐
来让爷抱一个16 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
心祭丫丫19 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪19 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
yeccheng21 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
联犀21 小时前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
zjxtxdy1 天前
C++面向对象程序开发-类与对象
开发语言·c++
qq_406981031 天前
c++拷贝构造函数
开发语言·c++
爱喝雪碧的可乐1 天前
MATLAB
开发语言·算法·matlab
H.莓飛1 天前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
j7~1 天前
【C++ 八股文】(篇四)C++11 新特性
开发语言·c++·面试·c++11·八股文