当前位置: 首页 > news >正文

Elasticsearch聚合分析实战

Elasticsearch聚合分析实战

引言

Elasticsearch的聚合功能是其强大的分析能力之一,支持指标聚合、桶聚合、管道聚合等多种分析方式。本文将详细介绍Elasticsearch聚合的使用方法和最佳实践。

聚合基础

1.1 聚合类型

import org.elasticsearch.search.aggregations.*; public class AggregationBasics { /** * 指标聚合 */ public void metricAggregations(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); // AVG聚合 AvgAggregationBuilder avgAgg = AggregationBuilders.avg("avg_price").field("price"); // SUM聚合 SumAggregationBuilder sumAgg = AggregationBuilders.sum("total_sales").field("sales"); // MAX聚合 MaxAggregationBuilder maxAgg = AggregationBuilders.max("max_price").field("price"); // MIN聚合 MinAggregationBuilder minAgg = AggregationBuilders.min("min_price").field("price"); // COUNT聚合 ValueCountAggregationBuilder countAgg = AggregationBuilders.count("count").field("productId"); // Stats聚合(包含所有统计) StatsAggregationBuilder statsAgg = AggregationBuilders.stats("price_stats").field("price"); // 添加聚合 builder.aggregation(avgAgg); builder.size(0); // 只返回聚合结果 } }

桶聚合

2.1 Terms聚合

/** * Terms桶聚合 */ public class TermsAggregation { /** * 按字段值分组 */ public void termsAggregation(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); // Terms聚合 TermsAggregationBuilder termsAgg = AggregationBuilders .terms("by_category") .field("category") .size(10) .order(Map.Entry.comparingByValue()); // 添加子聚合 termsAgg.subAggregation(AggregationBuilders.avg("avg_price").field("price")); termsAgg.subAggregation(AggregationBuilders.sum("total_sales").field("sales")); builder.aggregation(termsAgg); builder.size(0); } }

2.2 直方图聚合

/** * 直方图聚合 */ public class HistogramAggregation { /** * 数值直方图 */ public void histogramAggregation(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); // 数值直方图 HistogramAggregationBuilder histogram = AggregationBuilders .histogram("by_price") .field("price") .interval(100) .minDocCount(1); builder.aggregation(histogram); builder.size(0); } /** * 日期直方图 */ public void dateHistogramAggregation(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); DateHistogramAggregationBuilder dateHistogram = AggregationBuilders .dateHistogram("by_date") .field("createTime") .calendarInterval(DateHistogramInterval.MONTH) .format("yyyy-MM-dd") .minDocCount(0) .extendedBounds("2024-01-01", "2024-12-31"); builder.aggregation(dateHistogram); builder.size(0); } }

管道聚合

3.1 管道聚合

/** * 管道聚合 */ public class PipelineAggregation { /** * 管道聚合 */ public void pipelineAggregation(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); // 父聚合 - 按分类 TermsAggregationBuilder byCategory = AggregationBuilders .terms("by_category") .field("category") .size(10); // 子聚合 - 每个分类的平均价格 AvgAggregationBuilder avgPrice = AggregationBuilders.avg("avg_price").field("price"); // 管道聚合 - 计算平均值 AvgAggregationBuilder avgOfAvg = AggregationBuilders.avg("avg_of_avg") .field("avg_price"); // 添加管道聚合 byCategory.subAggregation(avgPrice); byCategory.subAggregation(avgOfAvg); builder.aggregation(byCategory); builder.size(0); } }

过滤聚合

4.1 全局和过滤聚合

/** * 过滤聚合 */ public class FilterAggregation { /** * 全局聚合 */ public void globalAggregation(RestHighLevelClient client) throws IOException { SearchSourceBuilder builder = new SearchSourceBuilder(); // 全局聚合 GlobalAggregationBuilder global = AggregationBuilders.global("all_products") .subAggregation(AggregationBuilders.avg("avg_price").field("price")); // 过滤聚合 FilterAggregationBuilder filter = AggregationBuilders.filter("electronics", QueryBuilders.termQuery("category", "electronics")); filter.subAggregation(AggregationBuilders.avg("avg_price").field("price")); builder.aggregation(global); builder.aggregation(filter); builder.size(0); } }

总结

Elasticsearch聚合分析功能强大,支持多种聚合类型和管道聚合,可以满足复杂的数据分析需求。掌握聚合的使用方法对于构建数据分析应用至关重要。

http://www.jsqmd.com/news/908164/

相关文章:

  • 火箭着陆制导算法:从凸优化到6-DoF控制
  • FreeRTOS性能调优利器:用SystemView揪出任务阻塞和中断延迟的元凶
  • 学习导师:从工具模式到感知模式的整合
  • LogAnalyzer实战:除了看系统日志,我这样用它监控Nginx访问和MySQL慢查询
  • Haskell与TensorFlow:用函数式编程构建安全可靠的AI系统
  • 视频隐写术实战:位置与精度如何决定信息隐藏的成败
  • Java(分支结构)
  • 别再凭感觉选电阻了!手把手教你计算MOSFET驱动电阻的功耗与封装(附Excel计算模板)
  • 魔百盒M401A安装Home Assistant Supervisor实录:我踩过的那些坑与终极解决方案
  • 定点乘法避坑指南:DSP和嵌入式开发中精度丢失与溢出处理的实战经验
  • Web安全实战解析与核心技术落地指南
  • AI赋能客户体验:从智能客服到预测性服务的实战指南
  • 从CoinGecko拆解数据产品架构:工程实践与商业模式深度分析
  • 别再混淆了!用Python的sklearn手把手教你算多分类的Precision、Recall和Accuracy
  • 算法练手题目:Cable master
  • 神仙免费云服务器 - 阿贝云
  • 164-基于Python的甜点销售数据可视化分析系统
  • 2026 夹层锅、蒸汽夹层锅、不锈钢封头、行星炒锅、食品杀菌锅、压力容器反应釜厂家综合榜单:用料、工艺、耐用度多维度行业分析 - 海棠依旧大
  • Gemini实战:用AI写CI/CD脚本,提升研发效能
  • 别再让CPU扛下所有:手把手教你用ethtool配置网卡TSO/GRO,网络性能飙升指南
  • ♪苍穹外卖♪Day2 | 项目日记
  • Hermes Agent 完全使用指南:从安装到多平台部署的全流程教程
  • 战略落地难?试试分拆对
  • 别再让GUI卡死了!用PySide6的QThread+QMutex实现一个带暂停/恢复功能的下载器
  • 自动语音识别技术原理与实战:从MFCC到端到端模型
  • 线性回归假设深度解析:从理论到实践的完整诊断与修正指南
  • 智能文档信息提取:OCR与AI技术融合的实战指南
  • 项目介绍 MATLAB实现基于SVM-LSTM支持向量机(SVM)结合长短期记忆网络(LSTM)进行回归预测(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我
  • PyTorch实战:手把手教你用L1范数给CNN模型‘瘦身’(附完整代码与可视化)
  • 别再手动复制了!微信小程序+vantUI组件库,用npm一键安装的保姆级避坑指南