Sql:
select hour,count(*),avg(billDuration)
from tab
where customerNumber ='13201646126'
group by hour
es:
GET cdr_20200110/_search
{
"size": 3,
"query": {
"term": {
"customerNumber": "13201646126"
}
},
"aggs": {
"hour_sum": {
"terms":{
"field": "hour"
},
"aggs": {
"avg_bill": {
"avg": {
"field": "billDuration"
}
}
}
}
}
}
自己写了个不知道对不对
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("customerNumber","13201646126");
AggregationBuilder aggsBuilder = AggregationBuilders.filter("hour_sum",termQueryBuilder);
TermsAggregationBuilder terms = AggregationBuilders.terms("hour");
AvgAggregationBuilder avgs =AggregationBuilders.avg("avg_bill").field("billDuration");
terms.subAggregation(avgs);
terms.subAggregation(aggsBuilder);
这个方式比较难搞啊,看看我的 如果有用的话别忘记采纳
public void search() throws IOException {
RestClient client = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")).build();
String dsl = "{" +
" \"size\": 3, " +
" \"query\": {" +
" \"term\": {" +
" \"customerNumber\": \"13201646126\"" +
" }" +
" }," +
" \"aggs\": {" +
" \"hour_sum\": {" +
" \"terms\":{" +
" \"field\": \"hour\"" +
" }," +
" \"aggs\": {" +
" \"avg_bill\": {" +
" \"avg\": {" +
" \"field\": \"billDuration\"" +
" }" +
" }" +
" }" +
" }" +
" }" +
"}";
HttpEntity entity = new NStringEntity(dsl,ContentType.APPLICATION_JSON);
Response performRequest = client.performRequest("GET","cdr_20200110/_search",Collections.singletonMap("pretty", "true"), entity);
JSONObject jsonobj = (JSONObject) JSONObject.parse(EntityUtils.toString( performRequest.getEntity()));
System.out.println(jsonobj.toString());
}