有时需要统计一段时间内,订单的总金额。类似于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. SqlServer2017下载地址

    https://www.microsoft.com/zh-CN/download/details.aspx?id=55994

  2. Python PEP-8编码风格指南中文版

    #PEP 8 – Python编码风格指南 PEP: 8 Title: Style Guide for Python Code Author: Guido van Rossum , Barry War ...

  3. CMM/CMMI的基本概念

    "CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM. 它是对于软件组织在定义.实施. ...

  4. Jenkins2.32打包Unity项目的记录

    前言 使用jenkins来打包unity3d的工程. jenkins :2.50 /2.32.3(长期支持版 建议使用此版本) 操作系统:windows 7 x64 sp1 (打包安卓和win) ,m ...

  5. Windows SDK 8安装失败的绕坑办法

    安装win sdk 8,提示错误:管道正在被关闭. 查看安装log文件,有如下错误: Error 0x800700e8: Failed to write message type to pipe.Er ...

  6. LeetCode算法题-Contains Duplicate(Java实现)

    这是悦乐书的第192次更新,第196篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第52题(顺位题号是217).给定一个整数数组,查找数组是否包含任何重复项.如果数组中至 ...

  7. Vue项目使用webstorm开发 保存浏览器不自动更新问题

    1.首先进去编辑器的设置页面 2.按照以下步骤进行操作,把如下选项的√去掉即可:

  8. Codeforces Round #542 B Two Cakes

    B. Two Cakes time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  9. tomcat 设置连接数

    maxConnections.maxThreads.acceptCount的含义及关系maxThreads:tomcat同时处理请求的任务个数,默认值为200maxConnections :tomca ...

  10. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)

    1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...