Elasticsearch聚合

聚合


聚合框架帮助集合搜索查询提供聚合数据。它基于称为聚合的简单构建块,这些构建快可以用来构建复杂的数据摘要。

聚合可以看作是在文档集合上构建分析信息的工作单元。执行的上下文定义了文档集合是什么。(例如,高级聚合执行在已执行搜索请求的查询/过滤器的上下文中)。

聚合由多种不同的类型,每一种都有其自己的目的与输出。可以简单的将它们划分为四个主要系列。

桶装
构建桶的聚合系列,每个桶关联于键和文档条件。当聚合执行时,所有的桶条件在上下文中的每一个文档上求值,当条件匹配时,文档被认为是“落入”与之关联的桶。在聚合执行的最后,将会得到一个桶列表,每个桶都有一组属于它的文档。

度量
跟踪文档集合并且计算文档集合的度量的聚合。

矩阵
操作多个字段并且根据从请求文档字段中提出的值产生一个矩阵结果的聚合系列。不像度量与桶聚合,这个聚合系列不支持脚本。

管道
聚合其他聚合的输出以及他们与之关联的度量的聚合。

由于一个桶可以有效定义一组文档(所有的文档都属于桶),这个集合潜在地关联桶级别的聚合,这些聚合在桶的上下文中执行。即,聚合可以嵌套。

桶聚合可以有子聚合(桶或度量)。字聚合会对双亲聚合生成的桶进行计算。嵌套聚合的深度/级别并没有硬限制。

聚合操作数据的double表示。因此,运行在绝对值大于2^53的数值上得到的结果将为近似值。

聚合结构

"aggregations": {
  "<aggregation_name>": {
    "<aggregation_type>": {
      <aggregation_body>
    }
    [, "meta": { [<meta_data_body>]}]?
    [, "aggregations": { [<sub_aggregation>]+ } ]?
  }
  [, "<aggregations_name_2>" : {...}]*
}

JSON中的aggregations对象(可以使用关键字aggs)持有将被计算的聚合。每个聚合关联一个用户定义的逻辑名称。这些逻辑名称用于识别响应中的聚合。每个聚合都有一个特定的类型,并且它通常是被命名聚合体的第一个键。聚合的每种类型根据聚合的特性定义了它自己的体。在聚合类型定义的相同级别上可以定义一组额外的聚合,虽然这只有在定义的聚合是桶特性时才有意义。在这种情况下,在桶聚合上定义的子聚合将会计算通过桶聚合构建的所有桶。

值源

一些聚合处理从聚合文档中提取的值。通常情况下,值从使用聚合的field键设置的特定文档中提取。也可以定义script来为每份文档生成值。

当field与script设置都被配置为聚合时,这个脚本将被作为value script对待。普通脚本通常在文档级别上求值,而值脚本在值级别上求值。在这种模式下,值将会从配置的字段中提取,脚本将会用于转化这些值。

当使用脚本时,lang与params设置也可以被定义。这个模板定义了使用的脚本语言。后者允许将脚本中的动态表达定义为参数,从而时脚本自身在调用间保持静态。

Elasticsearch使用映射中字段的类型来确认如何运行聚合以及规范响应。然后,Elasticsearch中有两种请求不能弄清楚这些信息:未映射字段与纯脚本。在这些情况下,可以通过使用value_type选项来给Elasticsearch提示,这个选项接收以下值:string、long、double、date、ip与boolean。


翻译源:Elasticsearch 6.4 文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值