【ES】学习9-聚合2

按时间统计:date_histogram

GET /cars/transactions/_search
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold",
            "interval": "month",
            "format": "yyyy-MM-dd"
         }
      }
   }
}

注意,这种写法在数字字段没有问题,但是在文本字段使用之前必须先把对应字段的fielddata设为true才可以。否则会报错:

"caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
    }

注意,设置了fielddata会消耗大量内存。

返回空buckets:设置参数 min_doc_count

限制返回时间范围:设置参数 extended_bounds

GET /cars/transactions/_search
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold",
            "interval": "month",
            "format": "yyyy-MM-dd",
            "min_doc_count" : 0,
            "extended_bounds" : {
                "min" : "2014-01-01",
                "max" : "2014-12-31"
            }
         }
      }
   }
}

扩展例子:

GET /cars/transactions/_search
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold",
            "interval": "quarter",
            "format": "yyyy-MM-dd",
            "min_doc_count" : 0,
            "extended_bounds" : {
                "min" : "2014-01-01",
                "max" : "2014-12-31"
            }
         },
         "aggs": {
            "per_make_sum": {
               "terms": {
                  "field": "make"
               },
               "aggs": {
                  "sum_price": {
                     "sum": { "field": "price" }
                  }
               }
            },
            "total_sum": {
               "sum": { "field": "price" }
            }
         }
      }
   }
}

分析一下上面的例子:

先是一个聚合,名为sales,类型是date_histogram,会根据时间生成桶

再看sales桶里,嵌套了一个聚合,包括per_make_sum和total_sum,

total_sum:用到了sum,这是一个指标,不会产生新的桶,会生成数值。

per_make_sum:用到了terms,会根据make字段划分子桶

在per_make_sum桶中,嵌套了sum_price聚合,也是一个sum指标,不会产生新桶。

上面的层级结构表示了桶的嵌套关系。关键在于区分哪些是桶,哪些是指标。

时间: 2024-10-06 02:26:30

【ES】学习9-聚合2的相关文章

ES权威指南(中文版)学习_聚合_3

1.查找所有员工最大的共同爱好: GET /megacorp/employee/_search {     "aggs":{         "all_interests":{             "terms":{                 "field":"interests"             }         }     } } 我们可以看到两个职员对音乐有兴趣,一个喜欢林学,一个

ES学习(四)--嵌套聚合、下钻分析、聚合分析

一. 先将文本field的fielddata属性设置为true PUT /ecommerce/_mapping { "properties":{ "tags":{ "type":"text", "fielddata":true } } } 二.统计每个tag下的商品数量 A.GET /ecommerce/_search { "size": 0,  "aggs": {

OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--OpenGL ES的基本用法.绘制流程与着色器编译>中实现了OpenGL ES的Android版HelloWorld,并且阐明了OpenGL ES的绘制流程,以及编译着色器的流程及注意事项.本文将从现实世界中图形显示的角度,说明OpenGL ES如何使得图像在移动设备上显示的更加真实.首先,物体有各种颜色

OpenGL ES学习资料总结

从今年春节后开始学习OpenGL ES,发现网上资料很有限,而且良莠不齐,所以整理了一下我学习时用到的资料和一些心得. 1. OpenGL ES1.x参考资料 把NEHE的教程移植到了Android上,当然用的是ES1 http://insanitydesign.com/wp/projects/nehe-android-ports/ 2. OpenGL ES2.x参考资料 有很多Android上ES2应用的文章 http://tangzm.com/blog/?p=20 特别好的书,网上有英文版p

ES学习2

1:es中的分页 一般搜索引擎中的分页都不会提供很大的页面查询,因为查询的页码越大,查询效率越低. 例子: 我们就先预想一下我们在搜索一个拥有5个主分片的索引.当我们请求第一页搜索的时 候,每个分片产生自己前十名,然后将它们返回给请求节点,然后这个节点会将50条 结果重新排序以产生最终的前十名. 现在想想一下我们想获得第1,000页,也就是第10,001到第10,010条结果,与之前同理, 每一个分片都会先产生自己的前10,010名,然后请求节点统一处理这50,050条结果 ,然后再丢弃掉其中的

Elasticsearch之es学习工作中遇到的坑(陆续更新)

1:es集群脑裂问题(不要用外网ip,节点角色不要混用) 原因1:阿里云服务器,外网有时候不稳定. 解决方案:单独采购服务器,内网安装 原因2:master和node节点没有分开 解决方案: 分角色:master节点(三台),data节点(随着数据增加而增加),client(随着查询压力而增加)节点 Master节点:node.master: true   node.data: false Data节点:node.master: false   node.data: true Client 节点

c++学习笔记——聚合类

聚合类定义:1.所有的成员都是public的. 2.没有定义任何构造函数. 3.没有类内初始值. 4.没有基类,也没有virtual函数. 聚合类的初始化:我们可以提供一个花括号括起来的成员函数初始值列表,并用它初始化聚合类的数据成员: 例如:Data   val={0,"Anna"};

Maven学习总结——聚合与继承

一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module> 3 <module>模块二</module> 4 <module>模块三</module> 5 </modules> 例如:对项目的Hello.HelloFriend.MakeFriends这三个模块进行聚合 1 <modules>

Es学习第六课, ES基本搜索_search

前面几课ES的基本概念.安装和分词都讲过了,下面我们就来实战一下ES的核心功能-搜索,这节课我们主要讲的是基本搜索 _search(注意:ES的关键字都要加前缀_,所以我们在定义索引.类型名称时不要带_). 我们先通过kibana插入几条三个文档 PUT /customer/doc/1?pretty { "name": "John Doe" } POST /customer/doc/ { "title": "My second blog

Es学习第七课, term、terms、match等基本查询语法

term.terms查询 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查询某个字段里含有某个关键词的文档 GET /customer/doc/_search/ { "query": { "term": { "title": "blog" } } } terms:查询某个字段里含有多个关键词的文档 GET /custome