這篇文章主要為大家展示了“Elasticsearch如何實現(xiàn)聚合優(yōu)化”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Elasticsearch如何實現(xiàn)聚合優(yōu)化”這篇文章吧。
成都創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站設(shè)計服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站設(shè)計及推廣,對石涼亭等多個領(lǐng)域擁有多年的網(wǎng)站推廣經(jīng)驗的網(wǎng)站建設(shè)公司。
大多數(shù)時候?qū)蝹€字段的聚合查詢還是非??斓?, 但是當(dāng)需要同時聚合多個字段時,就可能會產(chǎn)生大量的分組,最終結(jié)果就是占用 Elasticsearch大量內(nèi)存,從而導(dǎo)致 OOM 的情況發(fā)生。
實踐應(yīng)用發(fā)現(xiàn),以下情況都會比較慢:
1)待聚合文檔數(shù)比較多(千萬、億、十億甚至更多);
2)聚合條件比較復(fù)雜(多重條件聚合);
3)全量聚合(翻頁的場景用)。
"collect_mode" : "breadth_first"
depth_first 直接進(jìn)行子聚合的計算
breadth_first 先計算出當(dāng)前聚合的結(jié)果,針對這個結(jié)果在對子聚合進(jìn)行計算。
"execution_hint": "map"
國內(nèi)解釋最詳細(xì)的版本來自Wood大叔:
Map方式的結(jié)論可簡要概括如下:
1)查詢結(jié)果直接放入內(nèi)存中構(gòu)建map,在查詢結(jié)果集小的場景下,速度極快;
2)但如果待結(jié)果集合很大的情況,map方式不一定也快。
優(yōu)化方案N:
待進(jìn)一步深入實踐......
聚合的平衡點是多少呢?
場景一:在近億的document中,檢索滿足給定條件的數(shù)據(jù),并對聚合結(jié)果全量聚合。
場景二:在百萬級別的document中,全量聚合。
場景三:在近億級別的document中,全量聚合。
POST index_*/_search
{
"sort": [
{
"nrply": "desc"
}
],
"aggs": {
"count_over_sin": {
"terms": {
"field": "sin_id",
"execution_hint": "map",
"size": 1000,
"collect_mode": "breadth_first"
}
}
},
"size":0
}
1)修改索引名稱,以獲取更多的文檔。
2)map模式添加 “execution_hint”: “map”,默認(rèn)是global_ordinals模式。
3)”size”: 1000,設(shè)定聚合取值。
以上是“Elasticsearch如何實現(xiàn)聚合優(yōu)化”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!