ElasticSearch批量查询各个字段去重后的结果代码实现
计算指定索引,批量按多个字段去重后批量查询count结果
/**
* 计算指定索引,批量按多个字段去重后批量查询的count结果
* @param indexName
* @param distinctFieldNames
* @return
*/
public Map<String,Object> multiFieldDistinctCount(String indexName, List<String> distinctFieldNames){
Map<String,Object> fieldCountMap = new HashMap<>();
MultiSearchRequest request = new MultiSearchRequest();
for (String distinctFieldName : distinctFieldNames) {
String key = distinctFieldName;
SearchRequest searchRequestEach = new SearchRequest(indexName);
//2.构建SearchSourceBuilder查询对象
SearchSourceBuilder sourceBuilderEach = new SearchSourceBuilder();
//3.检索条件构造
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
AggregationBuilder aggregationBuilder = AggregationBuilders.cardinality(key).field("content." + distinctFieldName + ".keyword");
sourceBuilderEach.query(boolQueryBuilder).aggregation(aggregationBuilder);
//组装批量查询
searchRequestEach.source(sourceBuilderEach);
//添加searchRequestEach
request.add(searchRequestEach);
}
Integer dataConnId = 1;
DataConnModel dataConnModel = dataConnService.selectByPK(dataConnId);
ESAdapter esAdapter = new ESAdapter(dataConnModel);
try {
client = esAdapter.getClient();
MultiSearchResponse multiResponse = client.msearch(request, RequestOptions.DEFAULT);
for (MultiSearchResponse.Item item : multiResponse) {
SearchResponse response = item.getResponse();
Map<String, Aggregation> aggregationMap = response.getAggregations().getAsMap();
Set<String> keySet = aggregationMap.keySet();
List<String> keyList = new ArrayList<>(keySet);
ParsedCardinality result = response.getAggregations().get(keyList.get(0));
long count = result.getValue();
fieldCountMap.put(keyList.get(0),count);
}
} catch (IOException e) {
e.printStackTrace();
}
return fieldCountMap;
}
ES语句
ES按多个字段去重后批量查询的count结果语句。(注意postman调用时最后面要有空行)
http://192.168.xx.xxx:9200/bc_label_test16146165131/_msearch
{}
{"query":{"match_all":{}},"size":0,"aggs":{"国家_aggs":{"cardinality":{"field":"content.国家.keyword"}}}}
{}
{"query":{"match_all":{}},"size":0,"aggs":{"性别_aggs":{"cardinality":{"field":"content.性别.keyword"}}}}
{}
{"query":{"match_all":{}},"size":0,"aggs":{"装船_aggs":{"cardinality":{"field":"content.装船.keyword"}}}}
查询结果
批量查询结果如下:
{"国家":4,"性别":2,"装船":3}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- esig.cn 版权所有 湘ICP备2023023988号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务