ES 如何实现在一次检索中既用AggregationBuilders.count统计某一字段的个数又把这个个数作为检索条件。类似select count(personId) as num from tableName where num<5
2条回答 默认 最新
- 流比 2023-01-13 12:31关注
在 Elasticsearch 中,可以使用 Bool Query 来实现在一次检索中添加多个检索条件。
首先, 使用 AggregationBuilders.count() 来统计某一字段的个数,然后将这个统计结果作为条件进行查询。
示例代码如下:
SearchRequestBuilder srb = client.prepareSearch("indexName") .setTypes("typeName") .setQuery(QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("personId", "value")) .filter(QueryBuilders.rangeQuery("num").lt(5)) ) .addAggregation(AggregationBuilders.count("num").field("personId")) .setSize(0); SearchResponse sr = srb.execute().actionGet();
其中,setQuery() 方法中的 boolQuery() 可以添加多个查询条件,must() 方法用于添加必须满足的条件,filter() 方法用于添加过滤条件。
在这个例子中,先用 termQuery() 添加 personId 的查询条件,然后使用 rangeQuery() 添加 num 的过滤条件,最后调用 addAggregation() 方法添加统计聚合。
最后调用 execute() 方法执行查询,actionGet() 方法可以获取查询结果。
在这个例子中,我们实现了在一次检索中同时使用聚合和查询条件的功能,你可以根据需要在其上面做更改。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效