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();
相关推荐
武子康3 天前
调查研究-197 FAISS vs Elasticsearch 全面对比:从向量检索、全文搜索到 RAG 选型指南
人工智能·elasticsearch·agent
Elasticsearch4 天前
Elasticsearch ES|QL:现已支持视图、子查询和读取时模式定义
elasticsearch
Elasticsearch7 天前
Kibana 中的 SNMP 拓扑数据:从采集到 Canvas
elasticsearch
Elasticsearch9 天前
3个信号、2个环境变量、0个采集器:使用 Python 和 Elastic 的托管 OTLP 端点实现 OpenTelemetry
elasticsearch
Elasticsearch11 天前
如何通过 Claude Code 来写入 CSV 数据到 Elasticsearch
elasticsearch
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术13 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园13 天前
C++20 Modules 模块详解
java·开发语言·spring
大志哥12313 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch