ES上手之使用聚合功能分析結(jié)果

Elasticsearch聚合功能(aggregations)使你能夠獲取有關(guān)搜索結(jié)果的元信息,并回答像“德克薩斯州有多少個(gè)帳戶持有人?”、“田納西州的平均帳戶余額是多少?”之類的問題。你可以在一個(gè)請求中搜索、過濾文檔,并使用聚合功能分析結(jié)果。

例如,以下請求使用terms聚合功能(Simon:即按照某個(gè)字段名來聚合,類似MySQL中的group by <colunmName>)將bank索引中的所有帳戶按州名分組,并降序返回帳戶數(shù)量最多的十個(gè)州:

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

返回結(jié)果中的buckets字段是state字段相關(guān)的值。 doc_count顯示了每個(gè)state對應(yīng)的帳戶數(shù)。 例如,你可以看到ID(愛達(dá)荷州)有27個(gè)帳戶。 因?yàn)檎埱笾性O(shè)置了size=0,所以響應(yīng)僅包含聚合結(jié)果。

{
  "took": 29,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
     "total" : {
        "value": 1000,
        "relation": "eq"
     },
    "max_score" : null,
    "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
      } ]
    }
  }
}

你可以組合聚合語句來構(gòu)建更復(fù)雜的數(shù)據(jù)匯總查詢。 例如,以下請求將avg聚合嵌套在先前的group_by_state聚合內(nèi),以計(jì)算每個(gè)州的平均帳戶余額。

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

除了按計(jì)數(shù)結(jié)果進(jìn)行排序,你還可以在terms聚合查詢中指定子嵌套聚合查詢的結(jié)果進(jìn)行排序:

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

除了這些基本的聚合功能外,Elasticsearch還提供了定制化的聚合,用于在多個(gè)字段上操作并分析特定類型的數(shù)據(jù),例如日期,IP地址和地理數(shù)據(jù)。 你還可以將單個(gè)聚合的結(jié)果傳送到管道聚合中,以進(jìn)行進(jìn)一步分析。

聚合提供的核心分析可提供一些高級功能,例如使用機(jī)器學(xué)習(xí)來檢測異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容