教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢(xún)/投訴熱線(xiàn):400-618-4000

聚合分為幾類(lèi)?用DSL實(shí)現Bucket聚合

更新時(shí)間:2022年01月07日17時(shí)52分 來(lái)源:傳智教育 瀏覽次數:

什么是聚合?聚合(aggregations)可以實(shí)現對文檔數據的統計、分析、運算。聚合常見(jiàn)的有三類(lèi):

桶(Bucket)聚合:用來(lái)對文檔做分組,有TermAggregation和Date Histogram兩類(lèi)

TermAggregation:按照文檔字段值分組;

Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組;

度量(Metric)聚合:用以計算一些值,比如:最大值、最小值、平均值等

Avg:求平均值;

Max:求最大值;

Min:求最小值;

Stats:同時(shí)求max、min、avg、sum等

管道(pipeline)聚合:其它聚合的結果為基礎做聚合。
聚合

DSL實(shí)現Bucket聚合

現在,我們要統計所有數據中的酒店品牌有幾種,此時(shí)可以根據酒店品牌的名稱(chēng)做聚合。類(lèi)型為term類(lèi)型,DSL示例:

GET /hotel/_search
{
  "size": 0,  // 設置size為0,結果中不包含文檔,只包含聚合結果
  "aggs": { // 定義聚合
    "brandAgg": { //給聚合起個(gè)名字
      "terms": { // 聚合的類(lèi)型,按照品牌值聚合,所以選擇term
        "field": "brand", // 參與聚合的字段
        "size": 20 // 希望獲取的聚合結果數量
      }
    }
  }
}

Bucket聚合-聚合結果排序

默認情況下,Bucket聚合會(huì )統計Bucket內的文檔數量,記為_(kāi)count,并且按照_count降序排序。我們可以修改結果排序方式:

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "asc" // 按照_count升序排列
        },
        "size": 20
      }
    }
  }
}

Bucket聚合-限定聚合范圍

默認情況下,Bucket聚合是對索引庫的所有文檔做聚合,我們可以限定要聚合的文檔范圍,只要添加query條件即可:

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200 // 只對200元以下的文檔聚合
      }
    }
  }, 
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}


總結:

aggs代表聚合,與query同級,此時(shí)query的作用是限定聚合的的文檔范圍。

聚合必須的三要素:聚合名稱(chēng)、聚合類(lèi)型、聚合字段。

聚合可配置屬性有size:指定聚合結果數量、order:指定聚合結果排序方式、field:指定聚合字段。


猜你喜歡:

DSL查詢(xún)語(yǔ)法常見(jiàn)測查詢(xún)類(lèi)型有哪些?

delete()方法刪除文件及目錄【案例講解】

ResultSet接口中的常用方法

IterationTag接口使用教程

傳智教育java開(kāi)發(fā)培訓

0 分享到:
和我們在線(xiàn)交談!