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
生命不止,折腾不息
分类:
Elasticsearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!