最小值聚合

原文链接 :https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-aggregations-metrics-min-aggregation.html

译文链接 : 最小值聚合

贡献者 : @wangxiang,ApacheCNApache中文网

最小值聚合是一个单值度量聚合,用来记录和返回从聚合的文档中提取出的数字型值中的最小值。这些值可以从文档中的特定数字类型的字段提取,也可以通过脚本生成。

提示:最小值聚合和最大值聚合以数据的双重表示方式进行操作。 因此,如果在绝对值大于2 ^ 53的long类型的字段上运行最大值聚合或者最小值聚合,结果可能是近似值。

计算所有文档中价格最低的文档:

  1. POST /sales/_search?size=0
  2. {
  3. "aggs" : {
  4. "min_price" : { "min" : { "field" : "price" } }
  5. }
  6. }

返回值:

  1. {
  2. ...
  3. "aggregations": {
  4. "min_price": {
  5. "value": 10.0
  6. }
  7. }
  8. }

可以看出,可以以聚合的名称(min_price)作为关键字从返回的结果中查询出聚合的结果。

script

最小值聚合也可以通过脚本来计算,下面是一个计算最低价格的脚本的例子:

  1. POST /sales/_search
  2. {
  3. "aggs" : {
  4. "min_price" : {
  5. "min" : {
  6. "script" : {
  7. "inline" : "doc.price.value"
  8. }
  9. }
  10. }
  11. }
  12. }

这会使用Painless 脚本语言,而且这个脚本没有参数。如果想使用脚本文件,用下面的这种方式:

  1. POST /sales/_search
  2. {
  3. "aggs" : {
  4. "min_price" : {
  5. "min" : {
  6. "script" : {
  7. "file": "my_script",
  8. "params": {
  9. "field": "price"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }

提示:索引脚本只需要将file参数替换为id参数。

Value Script

比如index中的文档里的价格是以美元为单位的,但是我们现在想获得欧元的最小值(在这里假设汇率是1.2)。我们可以使用value script在聚合前来来实现每个值的汇率转化:

  1. POST /sales/_search
  2. {
  3. "aggs" : {
  4. "min_price_in_euros" : {
  5. "min" : {
  6. "field" : "price",
  7. "script" : {
  8. "inline" : "_value * params.conversion_rate",
  9. "params" : {
  10. "conversion_rate" : 1.2
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }

Missing Value

missing参数定义了如何处理缺少值的文档。 默认情况下如果没有指定的字段,这种文档将被忽略,但也可以认为它们具有指定的值。

  1. POST /sales/_search
  2. {
  3. "aggs" : {
  4. "grade_min" : {
  5. "min" : {
  6. "field" : "grade",
  7. "missing": 10
  8. }
  9. }
  10. }
  11. }

注释1:文档中如果没有grade这个字段,则认为该字段的值是10。