Spring Data Elasticsearch 聚合查詢


如需要統計某件商品的數量,最高價格,最低價格等就用到了聚合查詢,就像數據庫中的group by

    首先需要注入ElasticsearchTemplate

 @Autowired private ElasticsearchTemplate elasticsearchTemplate;

    然后開始操作

    //聚合
    public Map<String, Integer> polymerizationQuery() {
        String aggName = "popularBrand";
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //聚合
        queryBuilder.addAggregation(AggregationBuilders.terms("popularBrand").field("brand"));
        //查詢並返回帶聚合結果
        AggregatedPage<Item> result = elasticsearchTemplate.queryForPage(queryBuilder.build(), Item.class);
        //解析聚合
        Aggregations aggregations = result.getAggregations();
        //獲取指定名稱的聚合
        StringTerms terms = aggregations.get(aggName);
        //獲取桶
        List<StringTerms.Bucket> buckets = terms.getBuckets();
        //遍歷打印
        Map<String, Integer> map = new HashMap<>();
        for (StringTerms.Bucket bucket : buckets) {
            map.put(bucket.getKeyAsString(), (int) bucket.getDocCount());
            System.out.println("key = " + bucket.getKeyAsString());
            System.out.println("DocCount = " + bucket.getDocCount());
        }
        return map;
    }

 

 

 

 

 

   elasticseach的可視化數據

 

   其他方法

(1)統計某個字段的數量
  ValueCountAggregationBuilder vcb=  AggregationBuilders.count("自定義").field("uid");
(2)去重統計某個字段的數量
 CardinalityAggregationBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
(3)聚合過濾
FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
(4)按某個字段分組
TermsAggregationBuilder tb=  AggregationBuilders.terms("group_name").field("name");
(5)求和
SumAggregationBuilder  sumBuilder=    AggregationBuilders.sum("sum_price").field("price");
(6)求平均
AvgAggregationBuilder ab= AggregationBuilders.avg("avg_price").field("price");
(7)求最大值
MaxAggregationBuilder mb= AggregationBuilders.max("max_price").field("price"); 
(8)求最小值
MinAggregationBuilder min=    AggregationBuilders.min("min_price").field("price");
(9)按日期間隔分組
DateHistogramAggregationBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
(10)獲取聚合里面的結果
TopHitsBuilder thb=  AggregationBuilders.topHits("top_result"); (11)嵌套的聚合 NestedAggregationBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");
(12)反轉嵌套
AggregationBuilders.reverseNested("res_negsted").path("kps ");

  注:使用聚合查詢時不能使用分詞,因此字段需要設置為type = FieldType.Keyword


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM