自学内容网 自学内容网

ES-聚合分析

ES的聚合分析

什么是ES的聚合分析

  • ElasticSearch除搜索意外,提供的针对ES数据进行统计分析的功能
  • 通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单独的文档
  • 高性能,只要一条语句就可以得到分析结果

聚合分类

Bucket Aggregation 一些满足特定条件的文档的集合

  • Terms Aggregation:这种分桶策略是按照词条(term)来分桶,类似于SQL中的group by语法。如果是text类型,则按照分词后的结果分桶。例如,可以按照省份或用户名等字段进行分桶。
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "birth_place_bucket": {
      "terms": {
        "field": "birth_place"
      }
    }
  }
}
  • Range Aggregation:通过指定数值的范围来设定分桶规则。可以定义多个范围,文档会根据这些范围被分配到不同的桶中。
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "age_bucket": {
      "range": {
        "field": "age",
        "ranges": [
          { "from": 0, "to": 30 },
          { "from": 30, "to": 60 },
          { "from": 60, "to": 90 }
        ]
      }
    }
  }
}
  • Histogram Aggregation:直方图分桶,以固定间隔的策略来分割数据。可以指定间隔大小(interval)和数据范围(extended_bounds)。
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "age_bucket": {
      "histogram": {
        "field": "age",
        "interval": 30
      }
    }
  }
}
  • Date Histogram Aggregation:日期直方图分桶,根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组。
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "birthday_bucket": {
      "date_histogram": {
        "field": "birthday",
        "calendar_interval": "year"
      }
    }
  }
}

Metric Aggregation 一些数学运算,可以对文档字段进行统计分析

  • 仅输出一个值的运算
    min/max/sum/avg/cardinality
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "age_avg": {
      "avg": {
        "field": "age"
      }
    },
    "age_max": {
      "max": {
        "field": "age"
      }
    },
    "age_min": {
      "min": {
        "field": "age"
      }
    },
    "age_sum": {
      "sum": {
        "field": "age"
      }
    },
    "age_cardinality": {
      "cardinality": {
        "field": "age"
      }
    }
  }
}
  • 输出多个值的运算
    stats/percenties/percentile_ranks
GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "age_stats": {
      "stats": {
        "field": "age"
      }
    },
    "age_percentiles": {
      "percentiles": {
        "field": "age"
      }
    }
  }
}

Pipeline Aggregation 对其他运算结果的二次运算

GET xby_index_users/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "interval": "month"
      },
      "aggs": {
        "sales": {
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "avg_monthly_sales": {
      "avg_bucket": {
        "buckets_path": "sales_per_month>sales"
      }
    }
  }
}

原文地址:https://blog.csdn.net/Xbyou_1103591885/article/details/144760789

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!