99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

Elasticsearch 聚合查詢(二)

袁志蒙 2475次瀏覽

摘要:ES指標聚合,就是類似SQL的統計函數,指標聚合可以單獨使用,也可以跟桶聚合一起使用,常用的統計函數如下:Value Count - 類似sql的count函數,統計總數,Cardinality - 類似SQL的count(DISTINCT 字段)...

ES指標聚合,就是類似SQL的統計函數,指標聚合可以單獨使用,也可以跟桶聚合一起使用,常用的統計函數如下:

Value Count - 類似sql的count函數,統計總數

Cardinality - 類似SQL的count(DISTINCT 字段), 統計不重復的數據總數

Avg - 求平均值

Sum - 求和

Max - 求最大值

Min - 求最小值

1. Value Count

ES值聚合,主要用于統計文檔總數,類似SQL的count函數,例子:

POST /sales/_search?size=0
{
  "aggs": {
    "types_count": { // 聚合查詢的名字,隨便取個名字
      "value_count": { // 聚合類型為:value_count
        "field": "type" // 計算type這個字段值的總數
      }
    }
  }
}

等價SQL:

select count(type) from sales

返回結果:

{
    ...
    "aggregations": {
        "types_count": { // 聚合查詢的名字
            "value": 7 // 統計結果
        }
    }
}

2.Cardinality

基數聚合,也是用于統計文檔的總數,跟Value Count的區別是,基數聚合會去重,不會統計重復的值,類似SQL的count(DISTINCT 字段)用法,例子:

POST /sales/_search?size=0
{
    "aggs" : {
        "type_count" : { // 聚合查詢的名字,隨便取一個
            "cardinality" : { // 聚合查詢類型為:cardinality
                "field" : "type" // 根據type這個字段統計文檔總數
            }
        }
    }
}

等價SQL:

select count(DISTINCT type) from sales

返回結果:

{
    ...
    "aggregations" : {
        "type_count" : { // 聚合查詢的名字
            "value" : 3 // 統計結果
        }
    }
}

提示:前面提到基數聚合的作用等價于SQL的count(DISTINCT 字段)的用法,其實不太準確,因為SQL的count統計結果是精確統計不會丟失精度,但是ES的cardinality基數聚合統計的總數是一個近似值,會有一定的誤差,這么做的目的是為了性能,因為在海量的數據中精確統計總數是非常消耗性能的,但是很多業務場景不需要精確的結果,只要近似值,例如:統計網站一天的訪問量,有點誤差沒關系。

3.Avg (求平均值)

POST /exams/_search?size=0
{
  "aggs": {
    "avg_grade": { // 聚合查詢名字,隨便取一個名字
      "avg": { // 聚合查詢類型為: avg
        "field": "grade" // 統計grade字段值的平均值
      }
    }
  }
}

返回結果:

{
    ...
    "aggregations": {
        "avg_grade": { // 聚合查詢名字
            "value": 75.0 // 統計結果
        }
    }
}

4.Sum (求和計算)

POST /sales/_search?size=0
{
  "aggs": {
    "hat_prices": { // 聚合查詢名字,隨便取一個名字
      "sum": { // 聚合類型為:sum
        "field": "price" // 計算price字段值的總和
      }
    }
  }
}

返回結果:

{
    ...
    "aggregations": {
        "hat_prices": { // 聚合查詢名字
           "value": 450.0 // 統計結果
        }
    }
}

5.Max (求最大值)

POST /sales/_search?size=0
{
  "aggs": {
    "max_price": { // 聚合查詢名字,隨便取一個名字
      "max": { // 聚合類型為:max
        "field": "price" // 求price字段的最大值
      }
    }
  }
}

返回結果:

{
    ...
    "aggregations": {
        "max_price": { // 聚合查詢名字
            "value": 200.0 // 最大值
        }
    }
}

6.Min (求最小值)

POST /sales/_search?size=0
{
  "aggs": {
    "min_price": { // 聚合查詢名字,隨便取一個
      "min": { // 聚合類型為: min
        "field": "price" // 求price字段值的最小值
      }
    }
  }
}

返回結果:

{
    ...

    "aggregations": {
        "min_price": { // 聚合查詢名字
            "value": 10.0 // 最小值
        }
    }
}

7.多個分組條件

POST /exams/_search?size=0
{
  "size": 0,
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "Url.keyword": "*.yzmcms.com*"
          }
        },
        {
          "wildcard": {
            "Site.keyword": "*.yzmcms.com*"
          }
        },
        {
          "wildcard": {
            "Host.keyword": "*.yzmcms.com*"
          }
        }
      ]
    }
  },
  "aggs": {
    "urls": {
      "terms": {
        "field": "Url.keyword",
        "size": 1000
      }
    },
    "sites": {
      "terms": {
        "field": "Site.keyword",
        "size": 1000
      }
    },
    "hosts": {
      "terms": {
        "field": "Host.keyword",
        "size": 1000
      }
    }
  }
}

返回結果:

{
    ...
    "aggregations": {
        "urls": { // 聚合查詢名字
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": {
		            ...
	        },
        },
	    "sites": { // 聚合查詢名字
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": {
		            ...
	        },
        },
	    "hosts": { // 聚合查詢名字
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": {
		        ...
	         },
        }
    }
}

8.綜合例子

前面的例子,僅僅介紹聚合指標單獨使用的情況,實際應用中經常先通過query查詢,搜索索引中的數據,然后對query查詢的結果進行統計分析,例子:

POST /sales/_search
{
  "size": 0, // size = 0,代表不想返回query查詢結果,只要統計結果
  "query": { // 設置query查詢條件,后面的aggs統計,僅對query查詢結果進行統計
    "constant_score": {
      "filter": {
        "match": {
          "type": "hat"
        }
      }
    }
  },
  "aggs": { // 統計query查詢結果, 默認情況如果不寫query語句,則代表統計所有數據
    "hat_prices": { // 聚合查詢名字,計算price總和
      "sum": {
        "field": "price"
      }
    },
    "min_price": { // 聚合查詢名字,計算price最小值
      "min": { 
        "field": "price" 
      }
    },
    "max_price": { // 聚合查詢名字,計算price最大值
      "max": { 
        "field": "price"
      }
    }
  }
}

返回結果:

{
    ...
    "aggregations": {
        "hat_prices": { // 求和
           "value": 450.0
        },
        "min_price": { // 最小值
            "value": 10.0 
        },
        "max_price": { // 最大值
            "value": 200.0 
        }
    }
}


隨機內容

表情

共0條評論
  • 這篇文章還沒有收到評論,趕緊來搶沙發吧~