- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Elasticsearch聚合查询是一种强大的工具,允许我们对索引中的数据进行复杂的统计分析和计算。本文将详细解释一个聚合查询示例,该查询用于统计满足特定条件的文档数量,并计算其占总文档数量的百分比。这里回会分享如何统计某个字段的空值率,然后扩展介绍ES的一些基础知识.
此查询结构通过 GET /my_index/_search 发送到 Elasticsearch,以实现对索引 my_index 的聚合分析。查询分为以下几个部分:
{
"size": 0, // 不返回任何搜索结果,只聚合数据
"aggs": {
"all_documents_agg": { // 聚合所有文档
"terms": {
"script": {
"source": "return 'all_documents';" // 强制所有文档聚合到一个桶中
}
},
"aggs": {
"total_count": { // 统计所有文档的数量
"value_count": {
"field": "_id" // 使用文档的ID字段进行计数
}
},
"filtered_count": { // 统计满足特定条件的文档数量
"value_count": {
"script": {
"source": "if (doc['my_field'].size() != 0 && doc['my_field'].value != '') return 1" // 统计字段 'my_field' 非空且非零的文档数量
}
}
},
"percentage_agg": { // 计算满足特定条件的文档数量占总文档数量的百分比
"bucket_script": {
"buckets_path": {
"totalCount": "total_count", // 引用所有文档的数量
"filteredCount": "filtered_count" // 引用满足特定条件的文档数量
},
"script": "params.filteredCount / params.totalCount * 100" // 计算百分比
}
}
}
}
}
}
聚合部分详解 。
size: 0
:此设置意味着查询不会返回具体的搜索结果,而是仅执行聚合分析。aggs(聚合)
:定义了一个名为 all_documents_agg 的聚合。
terms
:使用 script 将所有文档强制聚合到一个名为 all_documents 的桶中。aggs
:在 all_documents 桶内,定义了三个子聚合:
total_count
:使用 value_count 统计所有文档的数量,基于文档的 _id 字段。filtered_count
:使用 value_count 统计满足特定条件的文档数量。条件是字段 my_field 非空且非零。percentage_agg
:使用 bucket_script 计算满足特定条件的文档数量占总文档数量的百分比。此聚合使用 total_count 和 filtered_count 的结果,并通过 params.filteredCount / params.totalCount * 100 计算百分比。Elasticsearch 的聚合功能类似于 SQL 中的 GROUP BY 语句,允许我们对数据进行分组和计算统计信息。聚合主要分为以下几类:
Metric Aggregations
(度量聚合):计算数值,例如计数、平均值、最大值、最小值等。例如,value_count 就是一个度量聚合,用于计算特定字段的值的数量。Bucket Aggregations
(桶聚合):将文档分组到不同的桶中。每个桶都可以包含一个或多个文档。例如,terms 聚合将文档根据特定字段的值进行分组。Pipeline Aggregations
(管道聚合):对其它聚合的结果进行进一步计算。例如,bucket_script 可以对多个聚合结果进行自定义计算。在 Elasticsearch 中,脚本可以用于在查询和聚合中执行动态计算。在上述查询中,脚本用于两个地方:
terms
聚合中的 script:将所有文档强制聚合到一个桶中。filtered_count
的条件判断:检查字段 my_field 是否非空且非零。bucket_script
聚合:计算满足条件的文档数量占总文档数量的百分比。使用脚本可以提供更大的灵活性,但需要注意性能和安全性问题.
Elasticsearch(ES)提供了丰富的聚合功能,用于对数据进行统计和分析。以下是一些常见的聚合类型及其示例:
sum
:计算数值字段的总和。avg
:计算数值字段的平均值。min
:查找数值字段的最小值。max
:查找数值字段的最大值。extended_stats
:获取数值字段的多个统计数据(平均值、最大值、最小值、总和、方差等)。value_count
:计算字段的非空值数量。示例:
{
"aggs": {
"my_sum_agg": {
"sum": {
"field": "numeric_field"
}
},
"my_avg_agg": {
"avg": {
"field": "numeric_field"
}
}
}
}
date_histogram
:基于时间范围将文档分组为多个桶。histogram
:基于数值字段将文档分组为多个桶。terms
:基于字符串或数值字段将文档分组为多个桶。filters
:将文档分组为多个桶,每个桶对应一组过滤条件。示例:
{
"aggs": {
"my_date_histogram_agg": {
"date_histogram": {
"field": "timestamp",
"interval": "1d"
}
},
"my_terms_agg": {
"terms": {
"field": "category_field"
}
}
}
}
matrix_stats
:计算多个数值字段的统计数据(如相关性、协方差、方差等)。示例:
{
"aggs": {
"my_matrix_stats_agg": {
"matrix_stats": {
"fields": ["numeric_field1", "numeric_field2"]
}
}
}
}
derivative
:计算聚合结果的导数。cumulative_sum
:计算聚合结果的累积和。bucket_script
:在多个桶聚合结果上执行脚本。bucket_selector
:根据脚本选择或排除特定桶。示例:
{
"aggs": {
"my_terms_agg": {
"terms": {
"field": "category_field"
},
"aggs": {
"my_avg_agg": {
"avg": {
"field": "numeric_field"
}
},
"my_bucket_script_agg": {
"bucket_script": {
"buckets_path": {
"avgField": "my_avg_agg"
},
"script": "params.avgField * 2"
}
}
}
}
}
}
原文地址:Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的 。
最后此篇关于Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?的文章就讲到这里了,如果你想了解更多关于Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前正在学习数据挖掘,有以下问题。 机器学习和数据挖掘之间有什么关系? 我发现许多数据挖掘技术都与统计相关,而我“听说”数据挖掘与机器学习有很多关系。所以我的问题是:机器学习与统计学密切相关吗? 如
我有很多表的数据,例如: event_id player finish 1 a 1 1 b 2 1 c
我对 http_status_module 提供的统计数据感兴趣 特别是上游部分的统计数据。 http://nginx.org/en/docs/http/ngx_http_status_module.
除了 Cluster MBean 之外,是否有任何可以在 Akka (Java) 中启用的内置 JMX 公开监控/统计信息?我看过 Typesafe Console,但由于它需要许可证才能用于从多个节
我正在尝试在我的程序中使用“usage”统计信息来获取类似于 time 的数据工具。但是,我很确定我做错了什么。这些值似乎是正确的,但有时可能有点奇怪。我没有在网上找到好的资源。有人知道如何做得更好吗
我有一个带有统计表的 MySQL 数据库。我想以年历、月度的形式输出数据。对于没有点击率的几个月,我想花费一个“空”DIV。有两个ID。 $query = mysqli_query($db,"SELE
设置: 问题是经典概率问题的复杂形式: 70 colored balls are placed in an urn, 10 for each of the seven rainbow colors.
有哪些 Ruby gem 可以执行数据处理? 最佳答案 我知道有 3 种从 Ruby 访问 R 的方法: RinRuby RSRuby 通过 Rserve-Ruby-Client 预约 RinRuby
背景 图像领域内的一个国内会议快要召开了,要发各种邀请邮件,之后要录入、统计邮件回复(参会还是不参会等)。如此重要的任务,老师就托付给我了。ps: 统计回复邮件的时候,能知道谁参会或谁不参会。
我正在添加用户输入的几个数字并将它们添加到数组列表中。 到目前为止我的代码: package project143; import java.util.*; /** * @author -- */
正如标题所示,我需要做的是在各种 iO/Android/Windows 应用程序中跟踪各种用户事件 - 例如点击、滑动、在页面上花费的时间等。 这些应用程序基于响应式 HTML/CSS/JS,并具有简
我希望计算 HTML 表中每个唯一值的实例数,并在其自己的表中返回结果。该表是根据用户的文本输入生成的。例如,用户输入可能如下所示: Report 46 Bob Marley 4/20/2
如何使用 PHP 计算数字数组的 z 分数?我需要计算 z 分数,然后找到百分位数 (CDF)!我可以使用哪些 PHP 函数?谢谢! 最佳答案 以下代码将给出 CDF 的良好近似值(Abramowit
我只是想知道是否可以计算 GitHub 上空存储库的总数。 如果不适合所有用户,可以为自己做吗? 编辑 我已经尝试过size:0搜索,但似乎返回了很多包含数据的存储库。采用 size:0..1 之类的
public class Scanner { private HtmlProcessor hp; private String baseUrl; private int ste
我正在使用 Mule ESB 3.4。我想开发一个自定义 Java 组件来计算流收到的请求数量。流程将例如像这样: http inbound-endpoint -> counter -> vm-out
我喜欢借助 GitHub API 来统计存储库中所有开放的拉取请求和问题。我发现 API 端点 /repos/:owner/:repo 结果包含 open_issues 属性。然而,这是问题和拉取请求
如何使用 PHP 计算数字数组的 z 分数?我需要计算 z 分数,然后找到百分位数 (CDF)!我可以使用哪些 PHP 函数?谢谢! 最佳答案 以下代码将给出 CDF 的良好近似值(Abramowit
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试以编程方式获取搜索字词列表的 Google 新闻搜索结果计数(即有多少个结果),但仅限于过去 1 年。使用用户界面搜索时,结果计数仅出现在常规搜索中,但在“工具 > 最近 > 过去一年”下时
我是一名优秀的程序员,十分优秀!