查询语句
GET index-*/_search
{
"query": {
"match": {
"name": "xxx"
}
},
"collapse": {
"field": "level" //去重字段
},
//去重后统计总数
"aggs": {
"count": {
"cardinality": {
"field": "level" //去重字段
}
}
},
"size": 10,
"from": 0
}
Java——RestHighLevelClient实现
@Autowired
private RestHighLevelClient client;
public void get() throws IOException {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("name","xxx"))
.collapse(new CollapseBuilder("level"))
.aggregation(AggregationBuilders.cardinality("alias").field("level"))
.from(0).size(10).sort("time", SortOrder.DESC);
SearchRequest searchRequest = new SearchRequest("index");
searchRequest.source(searchSourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
Cardinality cardinality = response.getAggregations().get("alias");
//总数
long value = cardinality.getValue();
//数据
SearchHit[] hits = response.getHits().getHits();
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
System.out.println(sourceAsMap);
}
}