在spring boot+springdata+es的代码中使用group by实现去重统计:
public int getDailyLeaseBike2(OperateAreasBo operateArea, String type, String type1, Long stime, Long etime, String queryDateField) {
BoolQueryBuilder boolQueryBuilder = createBoolQueryBuilder(operateArea, stime, etime, queryDateField);
boolQueryBuilder.must(QueryBuilders.matchQuery("orderStatus", 300));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withIndices(ES_INDEX_NAME)
.withTypes(ES_TYPE_NAME)
.withSourceFilter(new FetchSourceFilter(new String[]{"bikeId", "id"}, null)) //查询只显示这个字段,两个参数分别是要显示的和不显示的
.addAggregation(AggregationBuilders .terms("agg_data").field("bikeId").size(100000000))
.build();
int bikeLeaseCount = elasticsearchTemplate.query(searchQuery, response -> {
LongTerms modelTerms = (LongTerms)response.getAggregations().asMap().get("agg_data");
return modelTerms.getBuckets().size();
});
return bikeLeaseCount;
}