ElasticSearch6.x 基于SpringBoot 实现ElasticSearch的统计查询

AggregationUtil.java 实现elasticsearch 搜索引擎针对指定索引的max(最大值)、 min(最小值)、sum(合计统计)、avg(平均值统计)、 stats(基本统计)、extendedStats(高级统计)、cardinality(基数统计)、percentiles(百分比统计)、valueCount(文档数量统计)等相关统计功能。

package com.zzg.ela.index.util;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
import org.elasticsearch.search.aggregations.metrics.max.Max;
import org.elasticsearch.search.aggregations.metrics.min.Min;
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
import org.elasticsearch.threadpool.ThreadPoolStats.Stats;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * ela 工具类
 * 
 * @author zzg
 *
 */
@Component
public class AggregationUtil {
		// 引入 Ela 连接实列化对象
		@Autowired
		private TransportClient client;
		
		/**
		 * 最大值
		 * @param index  索引
		 * @param field  文档属性
		 * @return
		 */
	    public double max(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("max_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.max(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
	        Max max=response.getAggregations().get(name);
	        return max.getValue();
	    }
	    
	    /**
	     * 最小值统计
	     * @param index  索引
		 * @param field  文档属性
	     * @return
	     */
	    public double min(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("min_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.min(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
	        Min min=response.getAggregations().get(name);
	        return min.getValue();
	    }
	    
	    /**
	     * 合计统计
	     * param index  索引
	     * @param field 文档属性
	     * @return
	     */
	    public double sum(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("sum_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.sum(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
	        Sum sum=response.getAggregations().get(name);
	        return sum.getValue();
	    }
	    
	    
	    /**
	     * 平均值统计
	     * param index  索引
	     * @param field 文档属性
	     * @return
	     */
	    public double avg(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("avg_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.avg(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
	        Avg avg=response.getAggregations().get(name);
	        return avg.getValue();
	    }
	    
	    /**
	     * 基本统计
	     * @param index  索引
	     * @param field 文档属性
	     * @return
	     */
	    public Stats stats(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("stats_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.stats(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
	        return response.getAggregations().get(name);
	    }

	
	    /**
	     * 高级统计
	     * @param index  索引
	     * @param field  文档属性
	     * @return
	     */
	    public ExtendedStats extendedStats(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("extendedStats_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.extendedStats(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
	        return response.getAggregations().get(name);
	    }
	    
	    
	    /**
	     * 基数统计
	     * @param index  索引
	     * @param field  文档属性
	     * @return
	     */
	    public double cardinality(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("cardinality_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.cardinality(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
	        Cardinality c=response.getAggregations().get(name);
	        return c.getValue();
	    }
	    
	    /**
	     * 百分位统计
	     * @param index  索引
	     * @param field  文档属性
	     * @return
	     */
	    public Percentiles percentiles(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("percentiles_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.percentiles(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
	        return response.getAggregations().get(name);
	    }
	    
	    
	    /**
	     * 文档数量统计
	     * @param index  索引
	     * @param field  文档属性
	     * @return
	     */
	    public double valueCount(String index, String field){
	    	StringBuilder builder = new StringBuilder();
	    	builder.append("valueCount_").append(field);
	    	String name = builder.toString();
	    	
	        AggregationBuilder agg=AggregationBuilders.count(name).field(field);
	        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
	        ValueCount count=response.getAggregations().get(name);
	        return count.getValue();
	    }

}

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值