框架集合由搜索查詢(xún)選擇的所有數(shù)據(jù)。框架中包含許多構(gòu)建塊,有助于構(gòu)建復(fù)雜的數(shù)據(jù)描述或摘要。聚合的基本結(jié)構(gòu)如下所示 -
"aggregations" : {
"<aggregation_name>" : {
"<aggregation_type>" : {
<aggregation_body>
}
[,"meta" : { [<meta_data_body>] } ]?
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
}
有以下不同類(lèi)型的聚合,每個(gè)都有自己的目的 -
這些聚合有助于從聚合文檔的字段值計(jì)算矩陣,并且某些值可以從腳本生成。
數(shù)字矩陣或者是平均聚合的單值,或者是像stats
一樣的多值。
此聚合用于獲取聚合文檔中存在的任何數(shù)字字段的平均值。 例如,
POST http://localhost:9200/schools/_search
請(qǐng)求正文
{
"aggs":{
"avg_fees":{"avg":{"field":"fees"}}
}
}
響應(yīng)
{
"took":44, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0},
"hits":{
"total":3, "max_score":1.0, "hits":[
{
"_index":"schools", "_type":"school", "_id":"2", "_score":1.0,
"_source":{
"name":"Saint Paul School", "description":"ICSE Affiliation",
"street":"Dawarka", "city":"Delhi", "state":"Delhi",
"zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000,
"tags":["Good Faculty", "Great Sports"], "rating":"4.5"
}
},
{
"_index":"schools", "_type":"school", "_id":"1", "_score":1.0,
"_source":{
"name":"Central School", "description":"CBSE Affiliation",
"street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
"location":[31.8955385, 76.8380405], "fees":2200,
"tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}
},
{
"_index":"schools", "_type":"school", "_id":"3", "_score":1.0,
"_source":{
"name":"Crescent School", "description":"State Board Affiliation",
"street":"Tonk Road", "city":"Jaipur", "state":"RJ",
"zip":"176114", "location":[26.8535922, 75.7923988], "fees":2500,
"tags":["Well equipped labs"], "rating":"4.5"
}
}
]
}, "aggregations":{"avg_fees":{"value":3233.3333333333335}}
}
如果該值不存在于一個(gè)或多個(gè)聚合文檔中,則默認(rèn)情況下將忽略該值。您可以在聚合中添加缺少的字段,將缺少值視為默認(rèn)值。
{
"aggs":{
"avg_fees":{
"avg":{
"field":"fees"
"missing":0
}
}
}
}
此聚合給出特定字段的不同值的計(jì)數(shù)。 例如,
POST http://localhost:9200/schools*/_search
請(qǐng)求正文
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"name"}}
}
}
響應(yīng)
………………………………………………
{
"name":"Government School", "description":"State Board Afiliation",
"street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
"location":[18.599752, 73.6821995], "fees":500, "tags":["Great Sports"],
"rating":"4"
},
{
"_index":"schools_gov", "_type": "school", "_id":"1", "_score":1.0,
"_source":{
"name":"Model School", "description":"CBSE Affiliation", "street":"silk city",
"city":"Hyderabad", "state":"AP", "zip":"500030",
"location":[17.3903703, 78.4752129], "fees":700,
"tags":["Senior Secondary", "beautiful campus"], "rating":"3"
}
}, "aggregations":{"disticnt_name_count":{"value":3}}
………………………………………………
注 - 基數(shù)的值為
3
,因?yàn)槊Q(chēng) - Government, School 和 Model中有三個(gè)不同的值。
此聚合生成聚合文檔中特定數(shù)字字段的所有統(tǒng)計(jì)信息。 例如,
POST http://localhost:9200/schools/school/_search
請(qǐng)求正文
{
"aggs" : {
"fees_stats" : { "extended_stats" : { "field" : "fees" } }
}
}
響應(yīng)
{
"aggregations":{
"fees_stats":{
"count":3, "min":2200.0, "max":5000.0,
"avg":3233.3333333333335, "sum":9700.0,
"sum_of_squares":3.609E7, "variance":1575555.555555556,
"std_deviation":1255.2113589175156,
"std_deviation_bounds":{
"upper":5743.756051168364, "lower":722.9106154983024
}
}
}
}
此聚合查找聚合文檔中特定數(shù)字字段的最大值。 例如,
POST http://localhost:9200/schools*/_search
請(qǐng)求正文
{
"aggs" : {
"max_fees" : { "max" : { "field" : "fees" } }
}
}
響應(yīng)
{
aggregations":{"max_fees":{"value":5000.0}}
}
此聚合查找聚合文檔中特定數(shù)字字段的最小值。 例如,
POST http://localhost:9200/schools*/_search
請(qǐng)求正文
{
"aggs" : {
"min_fees" : { "min" : { "field" : "fees" } }
}
}
響應(yīng)
"aggregations":{"min_fees":{"value":500.0}}
此聚合計(jì)算聚合文檔中特定數(shù)字字段的總和。 例如,
POST http://localhost:9200/schools*/_search
請(qǐng)求正文
{
"aggs" : {
"total_fees" : { "sum" : { "field" : "fees" } }
}
}
響應(yīng)
"aggregations":{"total_fees":{"value":10900.0}}
在特殊情況下使用的一些其他度量聚合,例如地理邊界聚集和用于地理位置的地理中心聚集。
這些聚合包含用于具有標(biāo)準(zhǔn)的不同類(lèi)型的桶聚合,該標(biāo)準(zhǔn)確定文檔是否屬于某一個(gè)桶。桶聚合已經(jīng)在下面描述 -
子聚集
此存儲(chǔ)桶聚合會(huì)生成映射到父存儲(chǔ)桶的文檔集合。類(lèi)型參數(shù)用于定義父索引。 例如,我們有一個(gè)品牌及其不同的模型,然后模型類(lèi)型將有以下_parent
字段 -
{
"model" : {
"_parent" : {
"type" : "brand"
}
}
}
還有許多其他特殊的桶聚合,這在許多其他情況下是有用的,它們分別是 -
可以通過(guò)使用元標(biāo)記在請(qǐng)求時(shí)添加關(guān)于聚合的一些數(shù)據(jù),并可以獲得響應(yīng)。 例如,
POST http://localhost:9200/school*/report/_search
請(qǐng)求正文
{
"aggs" : {
"min_fees" : { "avg" : { "field" : "fees" } ,
"meta" :{
"dsc" :"Lowest Fees"
}
}
}
}
響應(yīng)
{
"aggregations":{"min_fees":{"meta":{"dsc":"Lowest Fees"}, "value":2180.0}}
}