一、参考

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"              }            }          }        }      }    }  }}