elk之聚合查询

聚合查询类型:

  1. metric(度量)聚合:度量类型聚合主要针对的number类型的数据,需要ES做比较多的计算工作
  2. bucketing(桶)聚合:划分不同的“桶”,将数据分配到不同的“桶”里。非常类似sql中的group语句的含义。

text变量,String类型不能用来分组。!!!!!!!!!


metric(度量)聚合:

1.接口:

/**
     * metric聚合查询
     *   @param client 连接
     *   @param indexName 索引名称
     *   @param typeName type名称
     */
    public void aggregateAllStudent(TransportClient client, String indexName, String typeName);

2.实现类
    @Override
    public void aggregateAllStudent(TransportClient client, String indexName, String typeName) {
        SearchRequestBuilder search = client.prepareSearch(indexName).setTypes(typeName);
        //求字段平均数
        SearchResponse avgSr = search.addAggregation(AggregationBuilders.avg("avg_score").field("score")).execute().actionGet();
        //年龄最大值
        SearchResponse maxSr = search.addAggregation(AggregationBuilders.max("max_age").field("age")).execute().actionGet();
        //年龄最小值
        SearchResponse minSr = search.addAggregation(AggregationBuilders.min("min_age").field("age")).execute().actionGet();
        //分数总和
        SearchResponse sumSr = search.addAggregation(AggregationBuilders.sum("sum_score").field("score")).execute().actionGet();
        //对应的对象获取别名字段
        Avg avgResult = avgSr.getAggregations().get("avg_score");
        Max maxResult = maxSr.getAggregations().get("max_age");
        Min minResult = minSr.getAggregations().get("min_age");
        Sum sumResult = sumSr.getAggregations().get("sum_score");
        System.out.println("分数平均" + avgResult.getValue());
        System.out.println("年龄最大" + maxResult.getValue());
        System.out.println("年龄最小" + minResult.getValue());
        System.out.println("分数总和" + sumResult.getValue());
    }

3.测试类:

   // metric聚合查询
        searchService.aggregateAllStudent(ConEsUtil.creatConEs(),"school1","student");

4.结果:

.................连接成功!
分数平均11.0
年龄最大2235.0
年龄最小22.0
分数总和66.0

bucketing(桶)聚合:

1.接口:

 /**
     * bucketing聚合查询
     *   @param client 连接
     *   @param indexName 索引名称
     *   @param typeName type名称
     */
    public void bucketAggregateStudent(TransportClient client, String indexName, String typeName);

2.实现类:

  @Override
    public void bucketAggregateStudent(TransportClient client, String indexName, String typeName) {
        SearchRequestBuilder search = client.prepareSearch(indexName).setTypes(typeName);
        //分组查询
        HistogramAggregationBuilder addtion = AggregationBuilders.histogram("prices").interval(2000).field("age");
        SearchResponse sr = search.addAggregation(addtion).execute().actionGet();
        Histogram histogram = sr.getAggregations().get("prices");
        List<Histogram.Bucket> list = (List<Histogram.Bucket>) histogram.getBuckets();
        for (Histogram.Bucket bucket : list
                ) {
            System.out.println(bucket.getKey());
        }
    }

3.测试类:

 // bucket 聚合查询
        searchService.bucketAggregateStudent(ConEsUtil.creatConEs(),"school1","student");

猜你喜欢

转载自blog.csdn.net/a1148233614/article/details/80045053