头图

一、参考

elasticsearch 学习系列目录——更新ing

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 对象,扩展了 桶排序:

类型说明termshistogramdate_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"
              }
            }
          }
        }
      }
    }
  }
}

一曲广陵散
76 声望21 粉丝

柴米油盐酱醋茶