返回結(jié)果如下,已經(jīng)按照key的大小從大到小排序:
…
“aggregations” : {
“price” : {
“buckets” : [
{
“key” : 80000.0,
“doc_count” : 1
},
{
“key” : 60000.0,
“doc_count” : 0
},
{
“key” : 40000.0,
“doc_count” : 0
},
{
“key” : 20000.0,
“doc_count” : 4
},
{
“key” : 0.0,
“doc_count” : 3
}
]
}
}
}
《Elasticsearch 權(quán)威指南》里指出:_key只在 histogram 和 date_histogram 內(nèi)使用,原文如下圖紅框所示:
但是在實際操作中發(fā)現(xiàn),6.7.1版本中,除了histogram 和 date_histogram,terms桶也可以用_key排序,如下圖,是按照key的字母降序:
把desc改為asc之后返回如下圖,變成了按照key的首字母升序排序:
3. 另外《Elasticsearch 權(quán)威指南》中還提到一種內(nèi)置排序類型_term,但是《Elasticsearch官方文檔》中宣布該類型在6.0之后已經(jīng)廢棄,如下:
也許是"手賤"的緣故,我還是用_term試了下,可以返回結(jié)果,但是會建議用_key替代_term,如下圖:
按照metrics排序(metrics結(jié)果只有一個值)
常見的metrics有累加和(sum)、最大值(max)、最小值(min)、平均值(avg),這些metrics的特點是處理結(jié)果只有一個值,我們可以按照這個結(jié)果來排序,例如計算每個汽車品牌的銷售額,再按照銷售額排序:
GET /cars/transactions/_search
{
“size”: 0,
“aggs”: {
“sales_rank”: {
“terms”: { —桶類型是terms
“field”: “make”, —按照make字段聚合
“order”: { —要求排序
“sales”: “desc” —排序字段是sales
}
},
“aggs”: {
“sales”: { —metrics處理后的結(jié)果保存在名為sales的字段中,排序已經(jīng)指定了該字段
“sum”: { —桶內(nèi)的metrics處理,類型是累加
“field”: “price” —將price字段的值累加
}
}
}
}
}
}
下面是聚合結(jié)果,可見已按照每個品牌的銷售額大小做了降序的排序:
…
“aggregations” : { —聚合結(jié)果
“sales_rank” : { —桶名稱
“doc_count_error_upper_bound” : 0,
“sum_other_doc_count” : 0,
“buckets” : [ —這個JSON數(shù)組內(nèi)是按照品牌聚合而成的所有桶
{
“key” : “bmw”, —品牌為bmw的桶
“doc_count” : 1, —文檔數(shù)量為1
“sales” : { —metrics處理結(jié)果
“value” : 80000.0 —品牌為bmw的汽車銷售總額是80000
}
},
{
“key” : “ford”,
“doc_count” : 2,
“sales” : {
“value” : 55000.0
}
},
{
“key” : “honda”,
“doc_count” : 3,
“sales” : {
“value” : 50000.0
}
},
{
“key” : “toyota”,
“doc_count” : 2,
“sales” : {
“value” : 27000.0
}
}
]
}
}
}
按照metrics排序(metrics結(jié)果有多個值)
和sum、max這些只有一個結(jié)果的metrics不同,extended_stats的結(jié)果包含了數(shù)量、最大值、最小值、平均值、累加和等多種處理,此時必須要指定用其中的哪一項(否則會返回錯誤:Invalid aggregation order path [xxxx]. When ordering on a multi-value metrics aggregation a metric name must be specified):
GET /cars/transactions/_search
{
“size”: 0,
“aggs”: {
“sales_rank”: {
“terms”: { —桶類型是terms
“field”: “make”, —按照make字段聚合
“order”: { —要求排序
“stat.avg”: “asc” —排序字段是metrics結(jié)果的一個子項(平均值),升序
}
},
“aggs”: {
“stat”: { —metrics處理后的結(jié)果保存在名為stat的字段中,排序已經(jīng)指定了該字段的agv子項(平均值)
“extended_stats”: { —桶內(nèi)的metrics處理,類型是計算數(shù)量、最大值、最小值、平均值等多個指標(biāo)項
“field”: “price” —將price字段的值拿來做metrics處理
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024b (備注Java)
最后
按照上面的過程,4個月的時間剛剛好。當(dāng)然Java的體系是很龐大的,還有很多更高級的技能需要掌握,但不要著急,這些完全可以放到以后工作中邊用別學(xué)。
學(xué)習(xí)編程就是一個由混沌到有序的過程,所以你在學(xué)習(xí)過程中,如果一時碰到理解不了的知識點,大可不必沮喪,更不要氣餒,這都是正常的不能再正常的事情了,不過是“人同此心,心同此理”的暫時而已。
“道路是曲折的,前途是光明的!”
711737274614)]
最后
按照上面的過程,4個月的時間剛剛好。當(dāng)然Java的體系是很龐大的,還有很多更高級的技能需要掌握,但不要著急,這些完全可以放到以后工作中邊用別學(xué)。
學(xué)習(xí)編程就是一個由混沌到有序的過程,所以你在學(xué)習(xí)過程中,如果一時碰到理解不了的知識點,大可不必沮喪,更不要氣餒,這都是正常的不能再正常的事情了,不過是“人同此心,心同此理”的暫時而已。
“道路是曲折的,前途是光明的!”
[外鏈圖片轉(zhuǎn)存中…(img-vtu7RjAU-1711737274614)]文章來源:http://www.zghlxwxcb.cn/news/detail-845111.html
[外鏈圖片轉(zhuǎn)存中…(img-ws81Z57O-1711737274615)]文章來源地址http://www.zghlxwxcb.cn/news/detail-845111.html
到了這里,關(guān)于Elasticsearch聚合學(xué)習(xí)之四:結(jié)果排序,阿里云java面試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!