有时需要统计一段时间内,订单的总金额。类似于sql的sum,针对某一字段求和。这就涉及到es的聚合查询,来看看用spring-data-elasticSearch怎么写:

  1.  
    QueryBuilder queryBuilder = QueryBuilders.boolQuery()
  2.  
    .must(QueryBuilders.rangeQuery("orderTime").gte(from).lte(to));
  3.  
    // 聚合查询。goodsSales是要统计的字段,sum_sales是自定义的别名
  4.  
    SumAggregationBuilder sumBuilder = AggregationBuilders.sum("sum_sales").field("goodsSales");
  5.  
     
  6.  
    SearchQuery searchQuery = new NativeSearchQueryBuilder()
  7.  
    .withQuery(queryBuilder)
  8.  
    .addAggregation(sumBuilder)
  9.  
    .build();
  10.  
     
  11.  
    double saleAmount = elasticsearchTemplate.query(searchQuery, response -> {
  12.  
    InternalSum sum = (InternalSum)response.getAggregations().asList().get(0);
  13.  
    return sum.getValue();
  14.  
    });

对应es查询语句:

  1.  
    {
  2.  
    "query": {
  3.  
    "bool": {
  4.  
    "must": [
  5.  
    {
  6.  
    "range": {
  7.  
    "orderTime": {
  8.  
    "gte": 20180313,
  9.  
    "lte": 20180314
  10.  
    }
  11.  
    }
  12.  
    },
  13.  
    {
  14.  
    "match": {
  15.  
    "skuNo": "888"
  16.  
    }
  17.  
    }
  18.  
    ]
  19.  
    }
  20.  
    },
  21.  
    "aggs": {
  22.  
    "sum_value": {
  23.  
    "sum_sales": {
  24.  
    "field": "goodsSales"
  25.  
    }
  26.  
    }
  27.  
    }
  28.  
    }

以下还有一些常用聚合查询(参考http://blog.csdn.net/u010454030/article/details/63266035):

    1.  
      (1)统计某个字段的数量
    2.  
      ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid");
    3.  
      (2)去重统计某个字段的数量(有少量误差)
    4.  
      CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");
    5.  
      (3)聚合过滤
    6.  
      FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));
    7.  
      (4)按某个字段分组
    8.  
      TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");
    9.  
      (5)求和
    10.  
      SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");
    11.  
      (6)求平均
    12.  
      AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");
    13.  
      (7)求最大值
    14.  
      MaxBuilder mb= AggregationBuilders.max("max_price").field("price");
    15.  
      (8)求最小值
    16.  
      MinBuilder min= AggregationBuilders.min("min_price").field("price");
    17.  
      (9)按日期间隔分组
    18.  
      DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");
    19.  
      (10)获取聚合里面的结果
    20.  
      TopHitsBuilder thb= AggregationBuilders.topHits("top_result");
    21.  
      (11)嵌套的聚合
    22.  
      NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");
    23.  
      (12)反转嵌套
    24.  
      AggregationBuilders.reverseNested("res_negsted").path("kps ");

elasticSearch聚合sum查询的更多相关文章

  1. ElasticSearch 聚合查询百分比

    这里用的是es5.6.9 bucket_script :它执行一个脚本,该脚本可以对多桶聚合中的指定度量执行每桶计算,指定的度量标准必须为数字,并且脚本必须返回数值. 官方语法 https://www ...

  2. Elasticsearch 第六篇:聚合统计查询

    h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...

  3. ElasticSearch聚合(转)

    ES之五:ElasticSearch聚合 前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提 ...

  4. Elasticsearch聚合初探——metric篇

    Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的统计--聚合. 前言 ES中的聚合被分为两大类:Metric度量和bucket桶(原谅我英语差,找不 ...

  5. Elasticsearch文档查询

    简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...

  6. Elasticsearch(GEO)空间检索查询

    Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...

  7. ElasticSearch聚合分析

    聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...

  8. kibana和ElasticSearch的信息查询检索

    使用kibana来进行ElasticSearch的信息查询检索 大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括Ela ...

  9. Elasticsearch索引和查询性能调优的21条建议

    Elasticsearch部署建议 1. 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SA ...

随机推荐

  1. 动态Linq表达式生成

    动态构建 WHERE(C=>C.Id=Value): public static IQueryable<T> WhereEqual<T>(this IQueryable& ...

  2. c#qq发邮件

    // SMTP(Simple Mail Transport Protocol)简单邮件传输协议.在.NET Frameword类库中提供SmtpClient类(System.Net.Mail),她提供 ...

  3. Mybatis 报错 There is no getter for property named '***' in 'class java.lang.String'

    在mapper.xml中 , 如果单参数是String类型 , 且在sql语句中对参数进行了判断 , 如下 when 中的判断 , 如果出现 if 判断也是一样的.都需要把判断中的参数用 _param ...

  4. SpringCloud之初识Robbin---负载均衡

    在上一篇中讲解Eureka注册中心的案例,我们启动了一个user-service,然后通过DiscoveryClient来获取服务实例信息,然后获取ip和端口来访问. 但是实际环境中,我们往往会开启很 ...

  5. 概率期望dp

    对于概率dp,我一直都弄得不是特别明白,虽然以前也有为了考试去突击过,但是终究还是掌握得不是很好,所以决定再去学习一遍,把重要的东西记录下来. 1.hdu4405 Description 在一个 \( ...

  6. java读取properties中文乱码

    1 确认properties文件的编码是utf-8 2 采用流的方式读取文件,设置编码为utf-8 public class ErrorCodeConfig { static Properties p ...

  7. console命令的其他强大用法

    阅读目录 谷歌控制台Elements面板查看元素上绑定的事情样式操作总况console.logconsole.infoconsole.errorconsole.warnconsole.debugcon ...

  8. PHP与Nginx之间的运行机制以及原理

    一.普及Nginx与Php-fpm相关知识点 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服 ...

  9. 【window】Windows10下为PHP安装redis扩展

    操作: 步骤1:D:\wamp\bin\apache\apache2.4.9\bin/php.ini中添加 ; php_redis extension=php_igbinary.dll extensi ...

  10. 【ES6】函数

    函数默认值问题 在ES6之前,不能直接为函数指定默认值,但是ES6允许为函数的参数设置默认值 之前实现方式 function log(x, y) { y = y || 'World'; console ...