[翻译]ElasticSearch官方文档-聚合

[翻译]ElasticSearch官方文档-聚合_第1张图片

本文翻译自:https://www.elastic.co/guide/en/elasticsearch/reference/current/_executing_aggregations.html#_executing_aggregations

本文是Elasticsearch的入门文档,将会介绍ElasticSearch中的聚合。

执行聚合(Aggregations)

聚合提供了从数据中分组和提取统计数据的能力。考虑聚合的最简单方法是将其大致等同于SQL GROUP BY和SQL聚合函数。在Elasticsearch中,你可以执行搜索并返回匹配,同时还可以在一个响应中返回与匹配不同的聚合结果。在这种情况下这是非常强大和高效的,因为你可以运行查询和多个聚合,并且在一次操作中获得两个(或任意一个)操作的结果,避免使用简化的api在网络中往返(增加负担)。

首先,本示例按状态对所有帐户进行分组,然后返回按降序(也是默认值)排序的前10个(默认)状态:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

在SQL中,上面的聚合在概念上类似于:

SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC

响应(部分显示):

{
  "took": 29,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
    "total" : 1000,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound": 20,
      "sum_other_doc_count": 770,
      "buckets" : [ {
        "key" : "ID",
        "doc_count" : 27
      }, {
        "key" : "TX",
        "doc_count" : 27
      }, {
        "key" : "AL",
        "doc_count" : 25
      }, {
        "key" : "MD",
        "doc_count" : 25
      }, {
        "key" : "TN",
        "doc_count" : 23
      }, {
        "key" : "MA",
        "doc_count" : 21
      }, {
        "key" : "NC",
        "doc_count" : 21
      }, {
        "key" : "ND",
        "doc_count" : 21
      }, {
        "key" : "ME",
        "doc_count" : 20
      }, {
        "key" : "MO",
        "doc_count" : 20
      } ]
    }
  }
}

我们可以看到ID(Idaho)中有27个账户,其次的TX(Texas)是27个账户,其次是AL(Alabama)的25个账户,等等。

请注意,我们将size = 0设置为不显示搜索命中,因为我们只想看到响应中的聚合结果。

在前面的汇总基础上,本示例按状态计算平均账户余额(再次仅按前几位按降序排列的状态):

    GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

注意我们如何嵌套group_by_state聚合内的average_balance聚合。这是所有聚合的通用模式。你可以任意嵌套聚合内的聚合,以便从数据中提取所需的嵌套摘要。

基于以前的聚合,现在让我们按降序对平均余额进行排序:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

这个例子演示了我们如何按年龄段(20-29岁,30-39岁和40-49岁)进行分组,然后按性别进行分组,然后最终得到每个性别的年龄段平均账户余额:

  GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "average_balance": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}

这里不详细叙述所有的聚合操作,详细的聚合操作在聚合指南中。

Elasticsearch既是一个简单又复杂的产品。到目前为止,文档介绍了什么是基础知识,如何看待它,以及如何使用一些REST API来使用它。希望本教程能够让你更好地理解Elasticsearch是什么,更重要的是,启发你进一步尝试其余的伟大功能!

你可能感兴趣的:([翻译]ElasticSearch官方文档-聚合)