zoukankan      html  css  js  c++  java
  • Elastic Stack:es JavaApi聚合搜索入门

    一.基本查询

    需求一:按照颜色分组,计算每个颜色卖出的个数

        @Test
        public void testAggs() throws IOException {
            SearchRequest request = new SearchRequest("tvs");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
            searchSourceBuilder.aggregation(AggregationBuilders.terms("group_by_colors").field("color"));
            request.source(searchSourceBuilder);
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            Aggregations aggregations = response.getAggregations();
            Terms aggregation = aggregations.get("group_by_colors");
            List<? extends Terms.Bucket> buckets = aggregation.getBuckets();
            for (Terms.Bucket bucket : buckets) {
                System.out.println(bucket.getKeyAsString());
                System.out.println(bucket.getDocCount());
            }
    
        }
    

    需求二:按照颜色分组,计算每个颜色卖出的个数,每个颜色卖出的平均价格 

        @Test
        public void testAggs2() throws IOException {
            SearchRequest request = new SearchRequest("tvs");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
            searchSourceBuilder.aggregation(
                    AggregationBuilders.terms("colors")
                            .field("color")
                            .subAggregation(AggregationBuilders.avg("avg_price").field("price")));
            request.source(searchSourceBuilder);
            SearchResponse search = client.search(request, RequestOptions.DEFAULT);
            Aggregations aggregations = search.getAggregations();
            Terms aggregation = aggregations.get("colors");
            List<? extends Terms.Bucket> buckets = aggregation.getBuckets();
            for (Terms.Bucket bucket : buckets) {
                Aggregations bucketAggregations = bucket.getAggregations();
                Avg avg_price = bucketAggregations.get("avg_price");
                double value = avg_price.getValue();
                System.out.println(bucket.getKeyAsString()+":"+value);
            }
        }
    

    需求三:按照颜色分组,计算每个颜色卖出的个数,以及每个颜色卖出的平均值、最大值、最小值、总和。 

            SearchRequest request = new SearchRequest("tvs");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
    
            TermsAggregationBuilder colorAggregation = AggregationBuilders.terms("colors").field("color");
            //放入多个子聚合
            colorAggregation.subAggregation(AggregationBuilders.avg("avg_price").field("price"));
            colorAggregation.subAggregation(AggregationBuilders.min("min_price").field("price"));
            colorAggregation.subAggregation(AggregationBuilders.max("max_price").field("price"));
            colorAggregation.subAggregation(AggregationBuilders.sum("sum_price").field("price"));
            searchSourceBuilder.aggregation(colorAggregation);
    
            request.source(searchSourceBuilder);
            SearchResponse search = client.search(request, RequestOptions.DEFAULT);
            Aggregations aggregations = search.getAggregations();
            Terms aggregation = aggregations.get("colors");
            List<? extends Terms.Bucket> buckets = aggregation.getBuckets();
            for (Terms.Bucket bucket : buckets) {
                Aggregations bucketAggregations = bucket.getAggregations();
                Avg avg_price = bucketAggregations.get("avg_price");
                double value = avg_price.getValue();
                System.out.println(bucket.getKeyAsString()+"avg:"+value);
                Min min_price = bucketAggregations.get("min_price");
                double min_priceValue = min_price.getValue();
                System.out.println(bucket.getKeyAsString()+"min:"+min_priceValue);
    
            }
    

    需求四:按照售价每2000价格划分范围,算出每个区间的销售总额 histogram

            SearchRequest request = new SearchRequest("tvs");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
            searchSourceBuilder.aggregation(
                    AggregationBuilders.histogram("price").field("price").interval(2000).
                            subAggregation(AggregationBuilders.sum("income").field("price")));
            request.source(searchSourceBuilder);
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            Aggregations aggregations = response.getAggregations();
            Histogram price = aggregations.get("price");
            List<? extends Histogram.Bucket> buckets = price.getBuckets();
            for (Histogram.Bucket bucket : buckets) {
                Aggregations aggregations1 = bucket.getAggregations();
                System.out.println("string:"+bucket.getKeyAsString());
                System.out.println("count:"+bucket.getDocCount());
                Sum income = aggregations1.get("income");
                double value = income.getValue();
                System.out.println("value:"+value);
            }
    

      

     

  • 相关阅读:
    【JMeter_14】JMeter逻辑控制器__交替控制器<Interleave Controller>
    【JMeter_13】JMeter逻辑控制器__执行时间控制器<Runtime Controller>
    【JMeter_12】JMeter逻辑控制器__包括控制器<Include Controller>
    【JMeter_11】JMeter逻辑控制器__Switch控制器<Switch Controller>
    【JMeter_10】JMeter逻辑控制器__ForEach控制器<ForEach Controller>
    【JMeter_09】JMeter逻辑控制器__临界部分控制器<Critical Section Controller>
    【JMeter_08】JMeter逻辑控制器__While控制器<While Controller>
    【JMeter_07】JMeter逻辑控制器__循环控制器<Loop Controller>
    【JMeter_06】JMeter逻辑控制器__If控制器<If Controller>
    【JMeter_05】创建第一个简单的接口脚本
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13100689.html
Copyright © 2011-2022 走看看