有时需要统计一段时间内,订单的总金额。类似于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. C#计算时间差 TimeSpan

    TimeSpan的相关属性 Add:与另一个TimeSpan值相加. Days:返回用天数计算的TimeSpan值. Duration:获取TimeSpan的绝对值. Hours:返回用小时计算的Ti ...

  2. 三星笔记本进入BIOS后找不到U盘启动项/快速启动键F12没有反应

    分析:BIOS开启了 Fast Bios Mode 解决方法: 开机按F2进入BIOS设置,选择Advanced菜单下Fast Bios Mode,设置为 Disabled,按F10键保存退出,重启时 ...

  3. 几个常用dos网络命令

    ping www.baidu.com 测试网络的同时,查看ip地址 1. 如图:百度的ip为  14.215.177.39.浏览器直接输入ip即可进入百度首页. 另外还有,14.215.177.38 ...

  4. Python 提案

    学习Java 不可不知JSR,学习Python自然也得知道 PEP了 1- PEP简介 PEP是Python增强提案(Python Enhancement Proposal)的缩写.https://w ...

  5. Python: 内置私有方法

    ################## __new__ ##################@staticmethod__new__(cls [, ...])类的构造器,创建某个类的实例,返回值应该是c ...

  6. linux ubuntu 关于vim得一些基本命令

    1.vim显示行号 :set number 2. 快捷键 J 向下 K 往上 H 向左 L 向右 ctrl+shift+T 打开新窗口 ctrl+Page Down 所有vim窗口向下切换 ctrl+ ...

  7. UVA11491-Erasing ans Winning(贪心)

    Problem UVA11491-Erasing ans Winning Accept: 799  Submit: 5753Time Limit: 3000 mSec Problem Descript ...

  8. UVA12107-Digit Puzzle(迭代加深搜索)

    Problem UVA12107-Digit Puzzle Accept:85  Submit:612 Time Limit: 3000 mSec  Problem Description  Inpu ...

  9. [tool] Visual Studio Code python配置

    语言设置 安装中文插件即可成为中文 选择一个Python解释器 Python是一种解释型语言,为了运行Python代码并获取Python IntelliSense,您必须告诉VS Code使用哪个解释 ...

  10. 强化学习(三)—— 时序差分法(SARSA和Q-Learning)

    1.时序差分法基本概念 虽然蒙特卡洛方法可以在不知道状态转移概率矩阵的前提下,灵活地求解强化学习问题,但是蒙特卡洛方法需要所有的采样序列都是完整的状态序列.如果我们没有完整的状态序列就无法用蒙特卡洛方 ...