es-java api使用

159 阅读1分钟

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"
					}
				}
			}
		}
	}
}