如需要統計某件商品的數量,最高價格,最低價格等就用到了聚合查詢,就像數據庫中的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