javaAPI实现elasticsearch5.5.2的聚合分析

前言:

在前面的几篇文章讲到了elasticsearch的搜索,但是elasticsearch还有强大的聚合分析功能,通过聚合,我们会得到一个数据的概览,这样对大数据提取统计指标时就变得游刃有余。聚合允许我们向数据提出一些复杂的问题。虽然功能完全不同于搜索,但它们使用相同的数据结构,执行速度很快并且就像搜索一样几乎是实时的。


一、聚合(Aggregations)的介绍

elasticsearch的聚合(Aggregations)类似于数据库sql中的分组 group by,count、sum等函数,除此之外他还有更多强大的数据统计分析接口。

聚合有两个核心概念:

1.桶(bucket):对数据进行分组。比如一个对象User他有一个属性是city,有如下数据:1.张三 上海 ;2.李四 北京; 3.王五 北京,我们就可以基于city划分buckets,一个是北京bucket,一个是上海bucket,按照某个字段进行bucket划分,那个字段的值相同的那些数据,就会被划分到一个bucket中,相当于sql中的group by分组。

2.指标(metric):对一个数据分组执行的统计。当我们有了一堆bucket之后,就可以对每个bucket中的数据进行聚合分词了,比如说计算一个bucket内所有数据的数量、平均值、最大值等的,metric就是对一个bucket执行的某种聚合分析的操作,相当于数据库中的avg,sum函数

二、Bucket aggregations 聚合分组的使用

官方参考资料:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_bucket_aggregations.html

我会在第一个例子中将完整的代码写出来,其他的例子仿照第一个进行

1. Terms Aggregation

terms按照某个字段进行分组,下面的代码中也涉及了排序问题,详细代码看注释

/**TermAggs 包含了Order
	 * termAggs统计每个颜色的个数
	* @Title: countByColor 
	* @Description: TODO(统计每个颜色的销量) 
	* @param @throws UnknownHostException
	* @return void
	* @autor lpl
	* @date 2017年11月6日
	* @throws
	 */
	@Test
	public void countByColor() throws UnknownHostException{
		//进行聚合查询,terms按照某个字段中进行分组
		TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders
				.terms("popular_colors")	//aggs的名称,自定义,取数据的时候与其一致即可
				.field("color")				//需要分组的字段
				//.order(Terms.Order.term(true))	//true表示按照term分组的asc排序
				.order(Terms.Order.count(true));  //true表asc按照doc_count排序,false表示desc排序		
				
		//查询数据进行聚合分析
		SearchResponse response = EsClient.client().prepareSearch("tvs").setTypes("sales")
				.addAggregation(termsAggregationBuilder)
				.setSize(0)
				.execute()
				.actionGet();
		//获取聚合
		Terms terms = response.getAggregations().get("popular_colors");
		//遍历处理数据
		for (Terms.Bucket entry : terms.getBuckets()) {
			Map<String,Object> map = new HashMap<String,Object>();
		    String key = (String) entry.getKey();      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值