es 聚合统计

es 聚合统计,第1张

es 聚合统计

最新项目做ES 统计 就分享一下:
直接上代码

	
	@Override
	public List esTjByMl(EsSearchDto esSearchDto) {
		List returnResult = new ArrayList<>();
		String index = esSearchDto.getIndex();
		try {
			SearchRequest request = new SearchRequest();
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			request.indices(index);
			// 多字段模糊条件
			BoolQueryBuilder boolQueryBuilder = boolQuery();
			// 必须条件 精准查询
			TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
			boolQueryBuilder.must(termQueryBuilder);
			//开始结束时间
			if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
				RangeQueryBuilder rangequerybuilder = QueryBuilders
						//传入时间
						.rangeQuery("cjsj")
									.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
				boolQueryBuilder.must(rangequerybuilder);
			}
			TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("mlmc.keyword");
			searchSourceBuilder.query(boolQueryBuilder);
			searchSourceBuilder.timeout(new Timevalue(10, TimeUnit.SECONDS));
			searchSourceBuilder.aggregation(termsBuilder);
			// 执行搜索
			request.source(searchSourceBuilder);
			// client执行
			SearchResponse response = client.search(request, RequestOptions.DEFAULT);
			// 获取统计后数据
			Terms terms = response.getAggregations().get("sum");

			for (int i = 0; i < terms.getBuckets().size(); i++) {
				HashMap map = new HashMap<>(16);
				// mlmc
				String mlmc = terms.getBuckets().get(i).getKey().toString();
				//数量
				Long sum = terms.getBuckets().get(i).getDocCount();
				map.put("mlmc", mlmc);
				map.put("num", sum.intValue());
				returnResult.add(map);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return returnResult;
	}


	
	@Override
	public List esTjByBcqxAndMl(EsSearchDto esSearchDto) {
		List list = new ArrayList<>();
		String index = esSearchDto.getIndex();
		try {
			SearchRequest request = new SearchRequest();
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			request.indices(index);
			// 多字段模糊条件
			BoolQueryBuilder boolQueryBuilder = boolQuery();
			// 必须条件 精准查询
			TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
			boolQueryBuilder.must(termQueryBuilder);
			//开始结束时间
			if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
				RangeQueryBuilder rangequerybuilder = QueryBuilders
						//传入时间,目标格式2020-01-02T03:17:37.638Z
						.rangeQuery("cjsj")
						.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
				boolQueryBuilder.must(rangequerybuilder);
			}
			//保存期限
			if (StringUtils.isNotBlank(esSearchDto.getBcqx())) {
				// 精准查询
				TermQueryBuilder termQueryBuilder2 = QueryBuilders.termQuery("bcqx", esSearchDto.getBcqx());
				boolQueryBuilder.must(termQueryBuilder2);
			}
			searchSourceBuilder.query(boolQueryBuilder);
			searchSourceBuilder.timeout(new Timevalue(10, TimeUnit.SECONDS));

			TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("bcqxsum").field("bcqxmc.keyword");
			TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword");
			termsBuilder2.subAggregation(termsBuilder1);

			searchSourceBuilder.aggregation(termsBuilder2);
			// 执行搜索
			request.source(searchSourceBuilder);

			// client执行
			SearchResponse response = client.search(request, RequestOptions.DEFAULT);

			// 获取统计后数据
			Terms terms = response.getAggregations().get("bcqxsum");
			for (Terms.Bucket buck : terms.getBuckets()) {
				String bcqxmc = buck.getKeyAsString();
				Terms mlsum = buck.getAggregations().get("mlsum");
				for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
					HashMap map = new HashMap<>(16);
					String mlmc = mlbuck.getKeyAsString();
					long num = mlbuck.getDocCount();
					map.put("bcqxmc", bcqxmc);
					map.put("mlmc", mlmc);
					map.put("num", num);
					list.add(map);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	
	@Override
	public List esDaTjByGdsjAndMl(EsSearchDto esSearchDto) {
		List list = new ArrayList<>();
		String index = esSearchDto.getIndex();
		try {
			SearchRequest request = new SearchRequest();
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			request.indices(index);
			// 多字段模糊条件
			BoolQueryBuilder boolQueryBuilder = boolQuery();
			// 必须条件 精准查询
			TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
			boolQueryBuilder.must(termQueryBuilder);
			//开始结束时间
			if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
				RangeQueryBuilder rangequerybuilder = QueryBuilders
						//传入时间,目标格式2020-01-02T03:17:37.638Z
						.rangeQuery("cjsj")
						.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
				boolQueryBuilder.must(rangequerybuilder);
			}

			searchSourceBuilder.query(boolQueryBuilder);
			searchSourceBuilder.timeout(new Timevalue(10, TimeUnit.SECONDS));

			DateHistogramAggregationBuilder termsBuilder2 = AggregationBuilders.dateHistogram("gdsjsum")
					.field("gdsj").dateHistogramInterval(DateHistogramInterval.YEAR);
			//termsBuilder2.format("yyyy");
			TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword");
			termsBuilder2.subAggregation(termsBuilder1);

			searchSourceBuilder.aggregation(termsBuilder2);
			// 执行搜索
			request.source(searchSourceBuilder);

			// client执行
			SearchResponse response = client.search(request, RequestOptions.DEFAULT);

			// 获取统计后数据
			Histogram terms = (Histogram) response.getAggregations().get("gdsjsum");
			for (Histogram.Bucket buck : terms.getBuckets()) {
				String gdsj = buck.getKeyAsString();
				DateTime time = DateUtil.date(new Long(gdsj));
				Terms mlsum = buck.getAggregations().get("mlsum");
				for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
					HashMap map = new HashMap<>(16);
					String mlmc = mlbuck.getKeyAsString();
					long num = mlbuck.getDocCount();
					map.put("year", time.year());
					map.put("mlmc", mlmc);
					map.put("num", num);
					list.add(map);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存