带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(7)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(7)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(6) https://developer.aliyun.com/article/1229237


8、统计聚合 stats

 

属于多值聚合,对聚合文档中的数值字段进行:count, min, max, avg 和 sum 的统计。

 

1)基础用法

 

下定义了一个名称为 price_stats 类型为 stats 的聚合,并对 price 字段进行统计,该字段也将作为结果返回:


POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "field" : "price"
            }
        }
    }
}

返回结果:


{
  ...
  "aggregations" : {
    "price_stats" : {
      "count" : 9,
      "min" : 7849.46,
      "max" : 9999.2,
      "avg" : 8834.814444444444,
      "sum" : 79513.33
    }
  }
}

2)脚本

 

l 使用内置脚本:

POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "script" : {
                  "lang":"painless",
                  "source":"doc['price']" 
                }
            }
        }
    }
}

返回结果:

{
  ...
  "aggregations" : {
    "price_stats" : {
      "count" : 9,
      "min" : 7849.46,
      "max" : 9999.2,
      "avg" : 8834.814444444444,
      "sum" : 79513.33
    }
  }
}

l 使用 runtime field 方式:


GET order/_search?size=0
{
  "size": 0,
  "runtime_mappings": {
    "price.discount": {
      "type": "double",
      "script": """
        emit(doc['price'].value * 0.8)
      """
    }
  },
  "aggs": {
    "price_stats": {
      "stats": {
        "field": "price.discount"
      }
    }
  }
}

3)缺失值

 

默认情况下,对于文档中统计字段中缺失值的情况下,这部分文档会被自动忽略掉,我们可以通过参数 missing 指定值,以下例子将对于 price 字段没有值的文档,默认按照 0 进行处理:

 

POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "field" : "price",
                "missing" : 0
            }
        }
    }
}

9、扩展统计聚合 extended_stats

 

属于多值聚合,相比统计聚合多了平方和(sum_of_squares),方差(variance),标准差

(std_deviation),平均值+/-两个标准差的区间(std_deviation_bounds)。

 

1)基础用法


POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count"
            }
        }
    }
}

返回结果:


{
  ...
  "aggregations" : {
    "count_extended_stats" : {
      "count" : 10,
      "min" : 20.0,
      "max" : 30.0,
      "avg" : 24.6,
      "sum" : 246.0,
      "sum_of_squares" : 6162.0,
      "variance" : 11.039999999999964,
      "variance_population" : 11.039999999999964,
      "variance_sampling" : 12.266666666666627,
      "std_deviation" : 3.3226495451672244,
      "std_deviation_population" : 3.3226495451672244,
      "std_deviation_sampling" : 3.5023801430836468,
      "std_deviation_bounds" : {
        "upper" : 31.24529909033445,
        "lower" : 17.954700909665554,
        "upper_population" : 31.24529909033445,
        "lower_population" : 17.954700909665554,
        "upper_sampling" : 31.604760286167295,
        "lower_sampling" : 17.595239713832708
      }
    }
  }
}

其中 std_deviation_bounds 的使用,只有当数据是以正太分布的情况下,展示出来的指标才有意义,如果统计的数据偏左或者偏右,则返回的值将产生误导。

对于 std_deviation_bounds 若想控制显示多少个与均值+/-的标准偏差,可以通过 sigma 参数设置。sigma 可以是任何非负双精度值。当设置为0时,只会返回边界 upper 和 lower 边界的平均值。

POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count",
                "sigma" : 2.5
            }
        }
    }
}

2)缺失值

 

默认情况下,当文档中缺失计算字段值时,该文档将会被忽略,若我们希望使用这部分文档,可以通过设置 missing 参数。以下例子中,缺失字段的 price 将按照 0 来计算。


POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count",
                "missing" : 0
            }
        }
    }
}

3)脚本

 

修正价格字段后,在进行聚合统计:


GET order/_search?size=0
{
  "runtime_mappings": {
    "price.discount": {
      "type": "double",
      "script": {
        "source": "emit(Math.max(200, doc['price'].value * params.correction))",
        "params": {
          "correction": 0.8
        }
      }
    }
  },
  "aggs": {
    "price_stats": {
      "extended_stats": { "field": "price.corrected" }
    }
  }
}

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(8) https://developer.aliyun.com/article/1229233

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
数据可视化 索引
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(13)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(13)
|
存储 算法 索引
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(4)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(4)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(3)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(3)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(8)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(8)
|
存储
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(2)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(2)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(11)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(11)
|
编解码 算法
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(6)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(6)
|
存储 索引
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(9)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(9)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(10)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(10)
|
存储 SQL 数据挖掘
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(1)
带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(1)