前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch 6.x 学习笔记:33.Java API之指标聚合

ElasticSearch 6.x 学习笔记:33.Java API之指标聚合

作者头像
程裕强
发布2022-05-06 19:24:00
2640
发布2022-05-06 19:24:00
举报
文章被收录于专栏:大数据学习笔记

0、自定义工具类

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/java-aggs.html To build aggregation requests, use AggregationBuilders helpers. Just import them in your class:

代码语言:javascript
复制
import org.elasticsearch.search.aggregations.AggregationBuilders;
代码语言:javascript
复制
package cn.hadron.es;
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.Stats;
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;
public class AggregationUtil {
    private String index="index";
    private TransportClient client = ESUtil.getClient();

    public AggregationUtil(String index){
        this.index=index;
    }
    ...
    ...
}

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/_metrics_aggregations.html

1、max统计

代码语言:javascript
复制
 /**
     * 最大值统计
     * @param field
     * @return
     */
    public double max(String field){
        AggregationBuilder agg=AggregationBuilders.max("aggMax").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
        Max max=response.getAggregations().get("aggMax");
        return max.getValue();
    }

2、min统计

代码语言:javascript
复制
    /**
     * 最小值统计
     * @param field
     * @return
     */
    public double min(String field){
        AggregationBuilder agg=AggregationBuilders.min("aggMin").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
        Min min=response.getAggregations().get("aggMin");
        return min.getValue();
    }

3、sum统计

代码语言:javascript
复制
    /**
     * 合计统计
     * @param field
     * @return
     */
    public double sum(String field){
        AggregationBuilder agg=AggregationBuilders.sum("aggSum").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
        Sum sum=response.getAggregations().get("aggSum");
        return sum.getValue();
    }

4、avg统计

代码语言:javascript
复制
/**
     * 平均值统计
     * @param field
     * @return
     */
    public double avg(String field){
        AggregationBuilder agg=AggregationBuilders.avg("aggAvg").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
        Avg avg=response.getAggregations().get("aggAvg");
        return avg.getValue();
    }

5、基本统计

代码语言:javascript
复制
 /**
     * 基本统计
     * @param field
     * @return
     */
    public Stats stats(String field){
        AggregationBuilder agg=AggregationBuilders.stats("aggStats").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("aggStats");
    }

6、高级统计

代码语言:javascript
复制
 /**
     * 高级统计
     * @param field
     * @return
     */
    public ExtendedStats extendedStats(String field){
        AggregationBuilder agg=AggregationBuilders.extendedStats("exStats").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("exStats");
    }

7、基数统计

代码语言:javascript
复制
 /**
     * 基数统计
     * @param field
     * @return
     */
    public double cardinality(String field){
        AggregationBuilder agg=AggregationBuilders.cardinality("cardinality").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
        Cardinality c=response.getAggregations().get("cardinality");
        return c.getValue();
    }

8、百分位统计

代码语言:javascript
复制
/**
     * 百分位统计
     * @param field
     * @return
     */
    public Percentiles percentiles(String field){
        AggregationBuilder agg=AggregationBuilders.percentiles("percentiles").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        return response.getAggregations().get("percentiles");
    }

9、文档数量统计

代码语言:javascript
复制
/**
     * 文档数量统计
     * @param field
     * @return
     */
    public double valueCount(String field){
        AggregationBuilder agg=AggregationBuilders.count("valueCount").field(field);
        SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
        ValueCount count=response.getAggregations().get("valueCount");
        return count.getValue();
    }

10、测试样例

(1)max

代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double max=util.max("age");
        System.out.println("max age="+max);
    }
}
代码语言:javascript
复制
max age=31.0

(2)min

代码语言:javascript
复制
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double min=util.min("salary");
        System.out.println("min salary="+min);
    }
代码语言:javascript
复制
min salary=15000.0

(3)avg

代码语言:javascript
复制
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double avg=util.avg("salary");
        System.out.println("avg salary="+avg);
    }
代码语言:javascript
复制
avg salary=17500.0

(4)sum

代码语言:javascript
复制
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double sum=util.sum("salary");
        System.out.println("sum salary="+sum);
    }
代码语言:javascript
复制
sum salary=105000.0

(5)stats

代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.metrics.stats.Stats;

public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Stats stats=util.stats("salary");
        System.out.println("min="+stats.getMin());
        System.out.println("max="+stats.getMax());
        System.out.println("avg="+stats.getAvg());
        System.out.println("sum="+stats.getSum());
        System.out.println("count="+stats.getCount());
    }
}
代码语言:javascript
复制
min=15000.0
max=20000.0
avg=17500.0
sum=105000.0
count=6

(6)extendedStats

代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        ExtendedStats stats=util.extendedStats("salary");
        System.out.println("min="+stats.getMin());
        System.out.println("max="+stats.getMax());
        System.out.println("avg="+stats.getAvg());
        System.out.println("sum="+stats.getSum());
        System.out.println("count="+stats.getCount());
        System.out.println("stdDeviation="+stats.getStdDeviation());
        System.out.println("sumOfSquares="+stats.getSumOfSquares());
        System.out.println("variance="+stats.getVariance());
    }
}
代码语言:javascript
复制
min=15000.0
max=20000.0
avg=17500.0
sum=105000.0
count=6
stdDeviation=2061.5528128088304
sumOfSquares=1.863E9
variance=4250000.0

(7)cardinality

代码语言:javascript
复制
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double cardinality=util.cardinality("salary");
        System.out.println("cardinality="+cardinality);
    }

4个工资级别

代码语言:javascript
复制
cardinality=4.0

(8)percentiles

代码语言:javascript
复制
package cn.hadron;
import cn.hadron.es.AggregationUtil;
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile;
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;

public class AggregationDemo {
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        Percentiles percent=util.percentiles("salary");
        for(Percentile p:percent) {
            System.out.printf("percent [%f],value [%f]\n",p.getPercent(),p.getValue());
        }
    }
}
代码语言:javascript
复制
percent [1.000000],value [15000.000000]
percent [5.000000],value [15000.000000]
percent [25.000000],value [15500.000000]
percent [50.000000],value [17500.000000]
percent [75.000000],value [19500.000000]
percent [95.000000],value [20000.000000]
percent [99.000000],value [20000.000000]

(9)valueCount

代码语言:javascript
复制
    public static void main(String[] args) {
        AggregationUtil util=new AggregationUtil("my-index");
        double count=util.valueCount("salary");
        System.out.println("count="+count);

    }
代码语言:javascript
复制
count=6.0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0、自定义工具类
  • 1、max统计
  • 2、min统计
  • 3、sum统计
  • 4、avg统计
  • 5、基本统计
  • 6、高级统计
  • 7、基数统计
  • 8、百分位统计
  • 9、文档数量统计
  • 10、测试样例
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档