通過匯總來分析結(jié)果

Elasticsearch 匯總聚合功能使得你可以獲得搜索結(jié)果的元數(shù)據(jù),比如“有多少賬戶持有者是在得克薩斯的?”或者“青年賬戶的平均余額是多少?”。 你可以在一個請求里完成搜索文檔,過濾,使用聚合分析結(jié)果的功能。

例如,下面這個請求通過terms聚合來講所有bank索引中的賬戶按照state來進(jìn)行分組,并且按照降序的方式來現(xiàn)實(shí)賬戶最多的10個states。

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

在應(yīng)答數(shù)據(jù)中buckets節(jié)點(diǎn)下是state的域值。 doc_count顯示的是每個state下的賬戶數(shù)。 比如,你可以看到在ID(Idaho)有27個賬戶。由于請求中size=0,所以返回的數(shù)據(jù)中只包含聚合的結(jié)果。

{
  "took" : 205,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 743,
      "buckets" : [
        {
          "key" : "TX",
          "doc_count" : 30
        },
        {
          "key" : "MD",
          "doc_count" : 28
        },
        {
          "key" : "ID",
          "doc_count" : 27
        },
        {
          "key" : "AL",
          "doc_count" : 25
        },
        {
          "key" : "ME",
          "doc_count" : 25
        },
        {
          "key" : "TN",
          "doc_count" : 25
        },
        {
          "key" : "WY",
          "doc_count" : 25
        },
        {
          "key" : "DC",
          "doc_count" : 24
        },
        {
          "key" : "MA",
          "doc_count" : 24
        },
        {
          "key" : "ND",
          "doc_count" : 24
        }
      ]
    }
  }
}

你還可以通過整合多個聚合條件來構(gòu)建更加復(fù)雜的數(shù)據(jù)結(jié)果統(tǒng)計(jì)。比如,下面這個請求在上層group_by_state基礎(chǔ)上嵌套了一個avg聚合參數(shù)來計(jì)算每個周的賬戶余額平均值。

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

除了通過賬戶數(shù)量來進(jìn)行排序外, 你還可以通過terms中指定排序的標(biāo)準(zhǔn)為嵌套聚合的結(jié)果,即在terms節(jié)點(diǎn)中指定按照每個state的賬戶平均值進(jìn)行排序。

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

除了這些基本的存儲和指標(biāo)聚合外, Elasticsearch還提供了特殊的聚合方式在多個域上操作或者分析特殊類型的數(shù)據(jù),比如日期,ip地址,geo數(shù)據(jù)(地理位置數(shù)據(jù))。 你還可以將單個聚合的結(jié)果放入聚合管道來進(jìn)行進(jìn)一步分析。

聚合提供的核心分析能力可以用來更高級別的特性使用,比如用機(jī)器學(xué)習(xí)來監(jiān)測異常。

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

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

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