ToB企服应用市场:ToB评测及商务社交产业平台

标题: Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索 [打印本页]

作者: 民工心事    时间: 2024-6-19 18:00
标题: Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索
目录

Elasticsearch聚合查询说明

Elasticsearch聚合查询是一种强大的工具,允许我们对索引中的数据进行复杂的统计分析和计算。本文将详细解释一个聚合查询示例,该查询用于统计满足特定条件的文档数量,并计算其占总文档数量的百分比。这里回会分享如何统计某个字段的空值率,然后扩展先容ES的一些基础知识。

空值率查询DSL

此查询结构通过 GET /my_index/_search 发送到 Elasticsearch,以实现对索引 my_index 的聚合分析。查询分为以下几个部分:
  1. {
  2.   "size": 0, // 不返回任何搜索结果,只聚合数据
  3.   "aggs": {
  4.     "all_documents_agg": { // 聚合所有文档
  5.       "terms": {
  6.         "script": {
  7.           "source": "return 'all_documents';" // 强制所有文档聚合到一个桶中
  8.         }
  9.       },
  10.       "aggs": {
  11.         "total_count": { // 统计所有文档的数量
  12.           "value_count": {
  13.             "field": "_id" // 使用文档的ID字段进行计数
  14.           }
  15.         },
  16.         "filtered_count": { // 统计满足特定条件的文档数量
  17.           "value_count": {
  18.             "script": {
  19.               "source": "if (doc['my_field'].size() != 0 && doc['my_field'].value != '') return 1" // 统计字段 'my_field' 非空且非零的文档数量
  20.             }
  21.           }
  22.         },
  23.         "percentage_agg": { // 计算满足特定条件的文档数量占总文档数量的百分比
  24.           "bucket_script": {
  25.             "buckets_path": {
  26.               "totalCount": "total_count", // 引用所有文档的数量
  27.               "filteredCount": "filtered_count" // 引用满足特定条件的文档数量
  28.             },
  29.             "script": "params.filteredCount / params.totalCount * 100" // 计算百分比
  30.           }
  31.         }
  32.       }
  33.     }
  34.   }
  35. }
复制代码
聚合部分详解
Elasticsearch聚合基础知识扩展

Elasticsearch聚合概念

Elasticsearch 的聚合功能类似于 SQL 中的 GROUP BY 语句,允许我们对数据进行分组和计算统计信息。聚合主要分为以下几类:
Script 用法

在 Elasticsearch 中,脚本可以用于在查询和聚合中执行动态计算。在上述查询中,脚本用于两个地方:
使用脚本可以提供更大的灵活性,但需要注意性能和安全性题目。
Elasticsearch聚合查询语法

Elasticsearch(ES)提供了丰富的聚合功能,用于对数据进行统计和分析。以下是一些常见的聚合类型及其示例:
指标聚合(Metric Aggregations)

示例:
  1. {
  2.   "aggs": {
  3.     "my_sum_agg": {
  4.       "sum": {
  5.         "field": "numeric_field"
  6.       }
  7.     },
  8.     "my_avg_agg": {
  9.       "avg": {
  10.         "field": "numeric_field"
  11.       }
  12.     }
  13.   }
  14. }
复制代码
桶聚合(Bucket Aggregations)

示例:
  1. {
  2.   "aggs": {
  3.     "my_date_histogram_agg": {
  4.       "date_histogram": {
  5.         "field": "timestamp",
  6.         "interval": "1d"
  7.       }
  8.     },
  9.     "my_terms_agg": {
  10.       "terms": {
  11.         "field": "category_field"
  12.       }
  13.     }
  14.   }
  15. }
复制代码
矩阵聚合(Matrix Aggregations)

示例:
  1. {
  2.   "aggs": {
  3.     "my_matrix_stats_agg": {
  4.       "matrix_stats": {
  5.         "fields": ["numeric_field1", "numeric_field2"]
  6.       }
  7.     }
  8.   }
  9. }
复制代码
组合聚合(Pipeline Aggregations)

示例:
  1. {
  2.   "aggs": {
  3.     "my_terms_agg": {
  4.       "terms": {
  5.         "field": "category_field"
  6.       },
  7.       "aggs": {
  8.         "my_avg_agg": {
  9.           "avg": {
  10.             "field": "numeric_field"
  11.           }
  12.         },
  13.         "my_bucket_script_agg": {
  14.           "bucket_script": {
  15.             "buckets_path": {
  16.               "avgField": "my_avg_agg"
  17.             },
  18.             "script": "params.avgField * 2"
  19.           }
  20.         }
  21.       }
  22.     }
  23.   }
  24. }
复制代码
原文地点:Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4