Elasticsearch使用篇 - 直方图聚合、日期直方图聚合、自动日期直方图聚合

这篇具有很好参考价值的文章主要介绍了Elasticsearch使用篇 - 直方图聚合、日期直方图聚合、自动日期直方图聚合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Histogram aggregation

[ˈhɪstəˌɡræm] ,直方图聚合。属于分桶聚合。

基于数值类型的字段或者数值范围类型的字段进行聚合。按照固定间隔动态构建分桶。

  • field:用于聚合的字段。

  • interval:指定每个桶之间的间隔。该值必须是一个大于 0 的双精度浮点数。

  • keyed:默认 false,则使用数组格式返回数据;如果设置 true,则使用键值对格式返回数据。

  • missing:如果文档没有聚合的字段,则指定一个缺省值。

  • min_doc_count:每个桶中的文档数需要大于等于该值时,才会返回。如果该值大于 0,则空桶不会被返回。

  • extended_bounds:用于拓展分桶数。可以指定 min、max 值。在 min 到 max 范围内,如果遇到空桶也会进行返回。

  • hard_bounds:用于限制分桶的范围。可以指定 min、max 值。限制返回 min 到 max 范围内的所有分桶。

  • order:指定排序规则。支持 _key_count。默认按照 _key 升序排序。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true,
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "FlightTimeMin": {
              "gte": 0,
              "lt": 500
            }
          }
        }
      ]
    }
  }
}

查询 FlightTimeMin 在 [0, 500) 范围内的所有文档,结果命中文档的数量为 6466。


接着我们使用 histogram 聚合并且 interval 参数设置为 500。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "FlightTimeMin_histrogram": {
      "histogram": {
        "field": "FlightTimeMin",
        "missing": 0,
        "min_doc_count": 0, 
        "interval": 500
      }
    }
  }
}

输出的聚合结果如下:

"aggregations" : {
    "FlightTimeMin_histrogram" : {
      "buckets" : [
        {
          "key" : 0.0,
          "doc_count" : 6466
        },
        {
          "key" : 500.0,
          "doc_count" : 5581
        },
        {
          "key" : 1000.0,
          "doc_count" : 935
        },
        {
          "key" : 1500.0,
          "doc_count" : 77
        }
      ]
    }
  }

可见,[0, 500) 范围内的文档数同样为 6466。


使用 hard_bounds 参数限制返回的分桶范围。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "FlightTimeMin_histrogram": {
      "histogram": {
        "field": "FlightTimeMin",
        "missing": 0,
        "min_doc_count": 0, 
        "interval": 500,
        "hard_bounds": {
          "min": 0,
          "max": 1000
        }
      }
    }
  }
}

聚合结果的输出如下:

"aggregations" : {
    "FlightTimeMin_histrogram" : {
      "buckets" : [
        {
          "key" : 0.0,
          "doc_count" : 6466
        },
        {
          "key" : 500.0,
          "doc_count" : 5581
        },
        {
          "key" : 1000.0,
          "doc_count" : 935
        }
      ]
    }
  }

可见,只返回了 0 到 1000 范围的三个桶。


指定 order 参数,按照文档数降序排序。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "FlightTimeMin_histrogram": {
      "histogram": {
        "field": "FlightTimeMin",
        "missing": 0,
        "min_doc_count": 0, 
        "interval": 500,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}

聚合结果输出如下:

"aggregations" : {
    "FlightTimeMin_histrogram" : {
      "buckets" : [
        {
          "key" : 0.0,
          "doc_count" : 6466
        },
        {
          "key" : 500.0,
          "doc_count" : 5581
        },
        {
          "key" : 1000.0,
          "doc_count" : 935
        },
        {
          "key" : 1500.0,
          "doc_count" : 77
        }
      ]
    }
  }

对 histogram 类型的字段进行直方图聚合。

PUT company-staff-001
{
  "mappings": {
    "properties": {
      "grade": {
        "type": "histogram"
      }
    }
  }
}

接着插入两条数据。

PUT company-staff-001/_doc/1
{
  "grade": {
    "values": [1, 2, 3, 4, 5],
    "counts": [100, 120, 150, 200, 220]
  }
}

PUT company-staff-001/_doc/2
{
  "grade": {
    "values": [2, 3, 4, 5, 6],
    "counts": [100, 120, 150, 200, 220]
  }
}

然后使用直方图聚合。

GET company-staff-001/_search
{
  "size": 0, 
  "aggs": {
    "latency_buckets": {
      "histogram": {
        "field": "grade",
        "interval": 5
      }
    }
  }
}

聚合结果输出如下:

"aggregations" : {
    "latency_buckets" : {
      "buckets" : [
        {
          "key" : 0.0,
          "doc_count" : 940
        },
        {
          "key" : 5.0,
          "doc_count" : 640
        }
      ]
    }
  }

histogram 聚合作为 terms 聚合的子聚合。

按照 DestCountry 分成三个桶,再对每个桶中 FlightTimeMin 进行直方图聚合,间隔为 500,按照文档数降序排序。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "DestCountry_terms": {
      "terms": {
        "field": "DestCountry",
        "size": 3
      },
      "aggs": {
        "FlightTimeMin_histogram": {
          "histogram": {
            "field": "FlightTimeMin",
            "interval": 500,
            "order": {
              "_count": "desc"
            }
          }
        }
      }
    }
  }
}

聚合结果输出如下:

"aggregations" : {
    "DestCountry_terms" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 7605,
      "buckets" : [
        {
          "key" : "IT",
          "doc_count" : 2371,
          "FlightTimeMin_histogram" : {
            "buckets" : [
              {
                "key" : 0.0,
                "doc_count" : 1368
              },
              {
                "key" : 500.0,
                "doc_count" : 897
              },
              {
                "key" : 1000.0,
                "doc_count" : 101
              },
              {
                "key" : 1500.0,
                "doc_count" : 5
              }
            ]
          }
        },
        {
          "key" : "US",
          "doc_count" : 1987,
          "FlightTimeMin_histogram" : {
            "buckets" : [
              {
                "key" : 500.0,
                "doc_count" : 933
              },
              {
                "key" : 0.0,
                "doc_count" : 905
              },
              {
                "key" : 1000.0,
                "doc_count" : 142
              },
              {
                "key" : 1500.0,
                "doc_count" : 7
              }
            ]
          }
        },
        {
          "key" : "CN",
          "doc_count" : 1096,
          "FlightTimeMin_histogram" : {
            "buckets" : [
              {
                "key" : 500.0,
                "doc_count" : 563
              },
              {
                "key" : 0.0,
                "doc_count" : 434
              },
              {
                "key" : 1000.0,
                "doc_count" : 90
              },
              {
                "key" : 1500.0,
                "doc_count" : 9
              }
            ]
          }
        }
      ]
    }
  }

Date_histogram aggregation

[ˈhɪstəˌɡræm] ,日期直方图聚合。属于分桶聚合。

和直方图聚合相似,但是只能对日期类型的字段或者日期范围类型的字段进行聚合。

  • field:用于聚合的字段。

  • format:限制 key_as_string 返回的时间格式、以及 extended_bounds、hard_bounds 参数的 min、max 指定的时间格式。

  • time_zone:指定时区。比如 -01:00、+08:00。

  • keyed:默认 false,则使用数组格式返回数据;如果设置 true,则使用键值对格式返回数据。

  • missing:如果文档没有聚合的字段,则指定一个缺省值。

  • min_doc_count:每个桶中的文档数需要大于等于该值时,才会返回。如果该值大于 0,则空桶不会被返回。

  • extended_bounds:用于拓展分桶数。可以指定 min、max 值。在 min 到 max 范围内,如果遇到空桶也会进行返回。

  • hard_bounds:用于限制分桶的范围。可以指定 min、max 值。限制返回 min 到 max 范围内的所有分桶。

  • order:指定排序规则。支持 _key_count。默认按照 _key 升序排序。

  • calendar_interval:指定间隔时间。支持如下几种值:

    • minute、1m
    • hour、1h
    • day、1d
    • week、1w
    • month、1M
    • quarter、1q
    • year、1y
  • fixed_interval:指定间隔时间。支持如下几种值:n 为某个数字

    • n milliseconds、ms
    • n seconds、s
    • n minutes、m
    • n hours、h
    • n days、d

对 timestamp 字段进行聚合,间隔为一个月。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "timestamp_histogram": {
      "date_histogram": {
        "field": "timestamp",
        "calendar_interval": "1M",
        "format": "yyyy-MM-dd"
      }
    }
  }  
}

聚合结果输出如下:

"aggregations" : {
    "timestamp_histogram" : {
      "buckets" : [
        {
          "key_as_string" : "2022-07-01",
          "key" : 1656633600000,
          "doc_count" : 4379
        },
        {
          "key_as_string" : "2022-08-01",
          "key" : 1659312000000,
          "doc_count" : 8680
        }
      ]
    }
  }

对 timestamp 字段进行聚合,间隔为 30 天。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "timestamp_histogram": {
      "date_histogram": {
        "field": "timestamp",
        "fixed_interval": "30d",
        "format": "yyyy-MM-dd"
      }
    }
  }  
}

聚合结果输出如下:

"aggregations" : {
    "timestamp_histogram" : {
      "buckets" : [
        {
          "key_as_string" : "2022-06-27",
          "key" : 1656288000000,
          "doc_count" : 2881
        },
        {
          "key_as_string" : "2022-07-27",
          "key" : 1658880000000,
          "doc_count" : 9305
        },
        {
          "key_as_string" : "2022-08-26",
          "key" : 1661472000000,
          "doc_count" : 873
        }
      ]
    }
  }

Auto_date_histogram aggregation

[ˈhɪstəˌɡræm] ,自动日期直方图聚合。属于分桶聚合。

与日期直方图聚合相似,但是不需要指定时间间隔,只需要指定分桶数,就会自动按照最佳的时间间隔进行分桶。

  • field:用于聚合的字段。

  • buckets:指定的分桶数。默认 10。实际返回的分桶数可能会小于等于该值。

  • format:限制 key_as_string 返回的时间格式。

  • time_zone:指定时区。比如 -01:00、+08:00。

  • missing:如果文档没有聚合的字段,则指定一个缺省值。

  • mimum_interval:指定最小的时间间隔。支持 year、month、day、hour、minute、second。

时间间隔按照天对 timestamp 字段分成 10 个桶。

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true, 
  "size": 0,
  "aggs": {
    "timestamp_auto_date_histogram": {
      "auto_date_histogram": {
        "field": "timestamp",
        "format": "yyyy-MM-dd",
        "buckets": 10,
        "minimum_interval": "day"
      }
    }
  }  
}

聚合结果如下:文章来源地址https://www.toymoban.com/news/detail-807193.html

"aggregations" : {
    "timestamp_auto_date_histogram" : {
      "buckets" : [
        {
          "key_as_string" : "2022-07-18",
          "key" : 1658102400000,
          "doc_count" : 2202
        },
        {
          "key_as_string" : "2022-07-25",
          "key" : 1658707200000,
          "doc_count" : 2177
        },
        {
          "key_as_string" : "2022-08-01",
          "key" : 1659312000000,
          "doc_count" : 2142
        },
        {
          "key_as_string" : "2022-08-08",
          "key" : 1659916800000,
          "doc_count" : 2187
        },
        {
          "key_as_string" : "2022-08-15",
          "key" : 1660521600000,
          "doc_count" : 2188
        },
        {
          "key_as_string" : "2022-08-22",
          "key" : 1661126400000,
          "doc_count" : 2163
        }
      ],
      "interval" : "7d"
    }
  }

到了这里,关于Elasticsearch使用篇 - 直方图聚合、日期直方图聚合、自动日期直方图聚合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用OpenCV显示图像的RGB颜色直方图

    2024年02月13日
    浏览(37)
  • 【OpenCV • c++】直方图计算 | 绘制 H-S 直方图 | 绘制一维直方图 | 绘制 RGB 三色直方图

      直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”,可以用来标记各种不同的事情,比如图像的色彩分布,物体边缘梯度模板等等。是计

    2024年02月09日
    浏览(35)
  • 【OpenCV • c++】自定义直方图 | 灰度直方图均衡 | 彩色直方图均衡

      直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”,可以用来标记各种不同的事情,比如图像的色彩分布,物体边缘梯度模板等等。是计

    2024年02月08日
    浏览(36)
  • C#使用OpenCv(OpenCVSharp)图像直方图均衡化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行直方图均衡化处理。 直方图均衡化原理 直方图均衡化(Histogram Equalization)是一种常用的图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像灰度级的像素值,使得图像的直方图在灰度范围内更加

    2024年02月07日
    浏览(46)
  • C#结合OpenCVSharp4使用直方图算法比较图片相似度

    直方图有 灰度直方图 、 颜色直方图 ,如果是灰度图像,那么就用 灰度直方图 ,这里使用 颜色直方图 来计算两个图片的相似度。 这里只记录如何使用,至于算法原理,问就是不会。 直方图算法效率高,但精度不够,适合快速比较,例如 以图搜图 通过NuGet包管理器进行下载。

    2024年02月09日
    浏览(30)
  • Python图像增强之直方图均衡化(全局直方图均衡、局部直方图均衡)

    图像增强是有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。 图像增强通常划分

    2024年02月13日
    浏览(28)
  • 【OpenCV学习笔记30】- OpenCV 中的直方图 - 直方图 - 4:直方图反投影

    这是对于 OpenCV 官方文档中 图像处理 的学习笔记。学习笔记中会记录官方给出的例子,也会给出自己根据官方的例子完成的更改代码,同样彩蛋的实现也会结合多个知识点一起实现一些小功能,来帮助我们对学会的知识点进行结合应用。 如果有喜欢我笔记的请麻烦帮我关注

    2024年03月26日
    浏览(41)
  • 【opencv】教程代码 —Histograms_Matching(2)计算直方图、直方图比较、直方图均衡、模板匹配...

    计算直方图 直方图比较 图像进行直方图均衡化处理 模板匹配 1. calcHist_Demo.cpp 计算直方图 这段代码的功能是加载图像,分离图像的三个颜色通道,然后分别计算这三个通道的直方图,绘制出来并显示结果。直方图是图像中像素值分布的图形表示,可以用于图像分析或图像处

    2024年04月11日
    浏览(37)
  • 使用pygal库绘制直方图、XY线图和饼状图的技术指南

    pygal是一个功能强大的Python库,用于绘制漂亮且交互性强的数据可视化图表。本文将深入介绍如何使用pygal库绘制直方图、XY线图和饼状图,并通过案例讲解帮助读者更好地掌握这些功能。 直方图是一种用于表示数据分布的图表,通过柱形的高度展示不同数值的频率。下面是绘

    2024年01月21日
    浏览(36)
  • OpenCv:直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)

    总结了使用Python OpenCv处理图像直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)的方法。 HE直方图增强,大家都不陌生,是一种比较古老的对比度增强算法。 通过equalizeHist()可以实现图像的直方图均衡,它是一种全局直方图均衡,考量的对象

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包