ES中pipeline聚合

还是基于上一篇文章的索引,kibana_sample_data_ecommerce。

基于pipeline 求最大值

这个是查询周一购买的金额的各项统计。

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "terms_day_of_week": {
      "terms": {
        "field": "day_of_week",
        "size": 1000,
        "include": "Monday"
      },
      "aggs": {
        "stats_taxful_total_price": {
          "stats": {
            "field": "taxful_total_price"
          }
        }
      }
    }
  }
}
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4675,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "terms_day_of_week" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "Monday",
          "doc_count" : 579,
          "avg_taxful_total_price" : {
            "count" : 579,
            "min" : 15.9765625,
            "max" : 2250.0,
            "avg" : 78.42882394214162,
            "sum" : 45410.2890625
          }
        }
      ]
    }
  }
}

从上边的语句中提取到最大的值或者最小的值。

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "terms_day_of_week": {
      "terms": {
        "field": "day_of_week",
        "size": 1000,
        "include": "Monday"
      },
      "aggs": {
        "stats_taxful_total_price": {
          "stats": {
            "field": "taxful_total_price"
          }
        }
      }
    },
    "pipeline-max-taxful_total_price":{
      "max_bucket": {
        "buckets_path": "terms_day_of_week>stats_taxful_total_price.max"
      }
    }
  }
}

pipeline 2层获取

先获取stats_taxful_total_price中的最大。
然后再获取terms_day_of_week中的最大值。

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "terms_day_of_week": {
      "terms": {
        "field": "day_of_week",
        "size": 1000
      },
      "aggs": {
        "terms_manufacturer": {
          "terms": {
            "field": "taxful_total_price"
          },
          "aggs": {
            "stats_taxful_total_price": {
              "stats": {
                "field": "taxful_total_price"
              }
            }
          }
        },
        "pipeline_taxful_total_price_max":
        {
          "max_bucket": {
            "buckets_path": "terms_manufacturer>stats_taxful_total_price.max"
          }
        }
        
      }
    },
    "pipeline_day_of_week_max":{
      "max_bucket": {
        "buckets_path": "terms_day_of_week>pipeline_taxful_total_price_max"
      }
    }
  }
}

pipeline-cumulative_sum 累计求和

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "order_date_date_histogram": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week",
        "extended_bounds": {
          "min": "now/d",
          "max": "now/d"
        }
      },
      "aggs": {
        "stats_taxful_total_price": {
          "stats": {
            "field": "taxful_total_price"
          }
        },
        "pipeline-cumulative_sum":{
          "cumulative_sum": {
            "buckets_path": "stats_taxful_total_price.sum"
          }
        }
      }
    }
  }
}

moving_avg-类滑动窗口的求平均值

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "order_date_date_histogram": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week",
        "format": "yyyy-MM-dd", 
        "extended_bounds": {
          "min": "now/d",
          "max": "now/d"
        }
      },
      "aggs": {
        "sum_taxful_total_price": {
          "sum": {
            "field": "taxful_total_price"
          }
        },
        "pipeline-avg":{
          "moving_avg": {
            "buckets_path": "sum_taxful_total_price",
            "window": 2
          }
        }
      }
    }
  }
}

moving_fn-类滑动窗口计算

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "order_date_date_histogram": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week",
        "format": "yyyy-MM-dd", 
        "extended_bounds": {
          "min": "now/d",
          "max": "now/d"
        }
      },
      "aggs": {
        "sum_taxful_total_price": {
          "sum": {
            "field": "taxful_total_price"
          }
        },
        "pipeline-avg":{
          "moving_fn": {
            "buckets_path": "sum_taxful_total_price",
            "window": 2,
            "script":"MovingFunctions.sum(values)",
            "shift":1
          }
        }
      }
    }
  }
}

serial_diff-计算2个结果的差值

GET kibana_sample_data_ecommerce/_search
{
  "track_total_hits": true,
  "size": 0,
  "aggs": {
    "order_date_date_histogram": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "week",
        "format": "yyyy-MM-dd", 
        "extended_bounds": {
          "min": "now/d",
          "max": "now/d"
        }
      },
      "aggs": {
        "sum_taxful_total_price": {
          "sum": {
            "field": "taxful_total_price"
          }
        },
        "pipeline-avg":{
          "serial_diff": {
            "buckets_path": "sum_taxful_total_price"
            
          }
        }
      }
    }
  }
}
Elasticsearch聚合器(Aggregations)是用于对搜索结果进行汇总和分析的重要工具。它们允许你在查询结果执行复杂的数据处理,例如计算总和、平均值、分组、过滤等。Elasticsearch提供了多种类型的聚合器,以下是其一些主要的: 1. **计数器(Bucket Count)**:最基本的聚合器,用于计算文档数量。 2. **值汇总(Value Sum, Avg, Min, Max)**:计算字段的数值总和、平均值、最小值或最大值。 3. **分桶(Bucketing Aggregators)**: - **分桶聚合器(Bucket Aggregation)**:如术语频率(Term Frequency)、IP范围(IP Range)和日期范围(Date Range)。 - **分组(Grouping)**:如分组桶(Terms, Histogram, Date Histogram)对数据进行分类并计算每个组的结果。 - **子分桶(Sub-Bucketing)**:如nested、geohash_grid等,用于嵌套文档的字段。 4. **最小值/最大值(Min/Max)**:找到指定字段的最小值或最大值。 5. **百分位数(Percentiles)**:计算数值字段的特定百分位数。 6. **卡方检验(Cardinality)**:估算字段值的数量,包括估算不确定性。 7. **直方图(Histogram)**:创建基于时间或数值的区间分布。 8. **地理聚合(Geo Aggregations)**:如geo_centroid、geo_bounds、geohash_grid等,用于地理位置数据。 9. **聚合管道(Pipeline Aggregations)**:允许你串联多个聚合操作以构建更复杂的分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值