• 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);
            }
    

      

     

  • 相关阅读:
    ubuntu14.04安装chromium以及flash插件
    linux fuser的使用
    对max_allowed_packet这个参数的误解
    Linux hostname主机名配置文件与文件 /etc/hosts解析(copy来的,原作者看到了别打我)
    三个参数,对mysql存储限制的影响
    唉,没来这里好久了,也意味着我这一年多来没干什么正事儿,是回归的时候了!(简单谈谈爬虫的解析器)
    STM32 宏定义翻转端口
    ascii码表
    平均值算法
    stm8 16M晶振下精确软件延时
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13100689.html
Copyright © 2020-2023  润新知