1.实现一个超时菜单统计且设置最小超时时间阈值过滤
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("group_by_action_type")
.field("action_type").size(GlobalConstants.LOG_MAX_SIZE);
AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("group_by_action_time")
.field(action_time);
//聚合后过滤
Map<String, String> map = CollUtil.newHashMap(1);
map.put(GlobalConstants.key, AggregationAlias.AVG_ACTION_TIME);
Script script = new Script("params.key>=60");
BucketSelectorPipelineAggregationBuilder filterAggregation = PipelineAggregatorBuilders
.bucketSelector("avg_filter", map, script);
termsBuilder.subAggregation(filterAggregation);
termsBuilder.subAggregation(avgAggregationBuilder);
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.aggregation(termsBuilder);
searchRequest.source(sourceBuilder);
es构建出来的sourceBuilder
{
"query": {
"bool": {
"must": [{
"range": {
"log_date": {
"from": "2022-09-20",
"to": "2022-10-20",
"include_lower": true,
"include_upper": true,
"boost": 1.0
}
}
}],
"adjust_pure_negative": true,
"boost": 1.0
}
},
"aggregations": {
"group_by_action_type": {
"terms": {
"field": "action_menu_detail.keyword",
"size": 10000,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [{
"_count": "desc"
}, {
"_key": "asc"
}]
},
"aggregations": {
"avg_action_time": {
"avg": {
"field": "action_time"
}
},
"group_by_action_detail": {
"terms": {
"field": "action_detail.keyword",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [{
"_count": "desc"
}, {
"_key": "asc"
}]
}
},
"group_by_app_id": {
"terms": {
"field": "app_id",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [{
"_count": "desc"
}, {
"_key": "asc"
}]
}
},
"avg_filter": {
"bucket_selector": {
"buckets_path": {
"key": "avg_action_time"
},
"script": {
"source": "params.key>=50",
"lang": "painless"
},
"gap_policy": "skip"
}
}
}
}
}
}