es查询json
{
"from": 0,
"size": 0,
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [],
"should": []
}
},
"aggs": {
"group_by_captureTime": {
"date_histogram": {
"field": "captureTime", //根据这个时间字段统计
"interval": "1d",//统计时间 间隔 可用 天=1d 时=1h 分等
"time_zone": "+08:00",//设置时区
"format": "yyyy-MM-dd HH",//统计反馈key
"min_doc_count": 0
}
}
}
}
查询返回结果
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1389,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"group_by_captureTime": {
"buckets": [
{
"key_as_string": "2021-10-09",
"key": 1633708800000,
"doc_count": 872
},
{
"key_as_string": "2021-10-10",
"key": 1633795200000,
"doc_count": 0
},
{
"key_as_string": "2021-10-11",
"key": 1633881600000,
"doc_count": 0
},
{
"key_as_string": "2021-10-12",
"key": 1633968000000,
"doc_count": 0
},
{
"key_as_string": "2021-10-13",
"key": 1634054400000,
"doc_count": 0
},
{
"key_as_string": "2021-10-14",
"key": 1634140800000,
"doc_count": 0
},
{
"key_as_string": "2021-10-15",
"key": 1634227200000,
"doc_count": 0
},
{
"key_as_string": "2021-10-16",
"key": 1634313600000,
"doc_count": 0
},
{
"key_as_string": "2021-10-17",
"key": 1634400000000,
"doc_count": 0
},
{
"key_as_string": "2021-10-18",
"key": 1634486400000,
"doc_count": 148
},
{
"key_as_string": "2021-10-19",
"key": 1634572800000,
"doc_count": 369
}
]
}
}
}
对应java 代码
public AlarmCameraResponse collectAlarmByCameraTime(AlarmCameraRequest param) {
AlarmCameraResponse response = AlarmCameraResponse.builder().previousTimes(0L).build();
long startTime = param.getStartTime()-24*60*60*1000*param.getCollectType();
//设置索引
SearchRequest searchRequest = new SearchRequest("alarm_index");
//构建查询
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
// 时间视频源等过滤填写到boolBuilder
boolBuilder.must(termsQuery("cameraSerial.keyword", param.getCameraSerials()));
RangeQueryBuilder query = QueryBuilders.rangeQuery("captureTime").includeLower(true).includeUpper(false);
query.from(startTime).to(param.getEndTime());
boolBuilder.must(query);
sourceBuilder.query(boolBuilder);
// 文档数据不查询,填写0,只查询聚合数据
sourceBuilder.size(0);
//根据时间范围确定查询数据分组大小
DateHistogramInterval dateHistogramInterval = null;
String pattern = null;
if(param.getCollectType()==1){
dateHistogramInterval = DateHistogramInterval.hours(1);
pattern = hourPattern;
}else{
dateHistogramInterval = DateHistogramInterval.days(1);
pattern = dayPattern;
}
AggregationBuilder aggregation = AggregationBuilders.dateHistogram("group_by_captureTime") // 聚合名称
.field("captureTime") // 聚合字段
.dateHistogramInterval(dateHistogramInterval) //聚合间隔,1小时
.timeZone(DateTimeZone.forTimeZone(TimeZone.getTimeZone("Asia/Shanghai"))) // key as string的格式化时区
.format(pattern); // key as string的格式划格式
sourceBuilder.aggregation(aggregation);
searchRequest.source(sourceBuilder);
//发送请求
SearchResponse searchResponse = null;
try {
log.info(searchRequest.toString());
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
log.error("统计查询异常:",e);
return response;
}
//获取聚合的结果
Map<String,Long> map = new LinkedHashMap<>();
Aggregations aggregations = searchResponse.getAggregations();
List<Aggregation> aggregationsList = aggregations.asList();
for (Aggregation aggregation1 : aggregationsList) {
List<? extends Histogram.Bucket> buckets = ((Histogram)aggregation1).getBuckets();
for (Histogram.Bucket bucket : buckets){
String keyAsString = bucket.getKeyAsString();
Long count = bucket.getDocCount();
map.put(keyAsString,count);
}
}
return response;
}
实际请求es json数据
{
"size": 0,
"query": {
"bool": {
"must": [
{
"terms": {
"cameraSerial.keyword": [
"5lmc67p7m7sw",
"4fb5c6be735a84a6aa60b984b1cff6e7a286a180d09900ca274aa82fd8f74db4",
"dcb95922a3167e92d9c6321cf73a778918fc89a9225aeef3c8da09973f88b985",
"5lmbwwqgsq9s"
],
"boost": 1.0
}
},
{
"range": {
"captureTime": {
"from": 1634572800000,
"to": 1634745599000,
"include_lower": true,
"include_upper": false,
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
},
"aggregations": {
"group_by_captureTime": {
"date_histogram": {
"field": "captureTime",
"format": "yyyy-MM-dd-HH",
"time_zone": "Asia/Shanghai",
"interval": "1h",
"offset": 0,
"order": {
"_key": "asc"
},
"keyed": false,
"min_doc_count": 0
}
}
}
}
以上代码是根据条件过滤后,再根据入参判断统计时间间隔,希望对大家有帮助,es使用的是高版本客户端
版权声明:本文为weixin_43704834原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。