乐趣区

关于聚合:elasticsearch-聚合初识一

一、参考

elasticsearch 权威指南

二、基本概念

2.1 两个次要概念

  1. bucket 桶

满足特定条件的文档的汇合

  1. metric 指标

对桶内的文档进行统计计算

每一个聚合都是

(1)一个或者多个桶

(2)0 个或者多个指标

的组合

2.2 桶

简略说来,桶就是满足了特定条件的文档的汇合

当聚合开始被执行,

(1)每个文档外面的值通过计算来决定合乎哪个桶的条件,

(2)如果匹配到,文档将放入对应的桶,并且接着进行聚合操作

(3)桶能够被嵌套到其余的桶中,提供层次化或者有条件的划分计划

2.3 指标

分桶是一种达到目标的伎俩,最终的指标是:

对于桶内的文档进行一些指标的计算

大多数的指标都是简略的数学计算

三、桶排序

3.1 默认排序

默认,多值桶会依据 doc_count 降序排列

3.2 order

引入了一个 order 对象,扩大了 桶排序:

类型 阐明 terms histogram date_histogram
_count 依照文档数量排序
_term 依照词项的字符串的字典顺序排列
_key 按每个桶的键值数值排序

3.3 度量排序

能够增加一个度量聚合,而后在外层 order 中指定 具体的度量

  1. 度量只有 1 个输入值
GET /cars/_search
{
  "size": 0,
  "aggs": {
    "colors": {
      "terms": {
        "field": "color",
        "order": {"avg_price": "asc"}
      },
      "aggs": {
        "avg_price": {
          "avg": {"field": "price"}
        }
      }
    }
  }
}
  1. 度量如果有多个值,须要指定具体的参数
GET /cars/_search
{
  "size": 0,
  "aggs": {
    "colors": {
      "terms": {
        "field": "color",
        "order": {"stats.variance": "asc"}
      },
      "aggs": {
        "stats": {
          "extended_stats": {"field": "price"}
        }
      }
    }
  }
}

3.4 深度度量

能够定义更深的门路,将度量用尖括号(>)嵌套起来,像这样:

my_bucket>another_bucket>metric

然而:

(1) 嵌套门路上的每个桶都必须是 单值 的

(2) 只有三个单值桶:filterglobalreverse_nested

GET /cars/_search
{
  "size": 0,
  "aggs": {
    "colors": {
      "histogram": {
        "field": "price",
        "interval": 20000,
        "order": {"red_green_cars>stats.variance": "asc"}
      },
      "aggs": {
        "red_green_cars": {
          "filter": {
            "terms": {
              "color": [
                "red",
                "green"
              ]
            }
          },
          "aggs": {
            "stats": {
              "extended_stats": {"field": "price"}
            }
          }
        }
      }
    }
  }
}
退出移动版