您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Elasticsearch如何實現聚合優化”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Elasticsearch如何實現聚合優化”這篇文章吧。
大多數時候對單個字段的聚合查詢還是非常快的, 但是當需要同時聚合多個字段時,就可能會產生大量的分組,最終結果就是占用 Elasticsearch大量內存,從而導致 OOM 的情況發生。
實踐應用發現,以下情況都會比較慢:
1)待聚合文檔數比較多(千萬、億、十億甚至更多);
2)聚合條件比較復雜(多重條件聚合);
3)全量聚合(翻頁的場景用)。
"collect_mode" : "breadth_first"
depth_first 直接進行子聚合的計算
breadth_first 先計算出當前聚合的結果,針對這個結果在對子聚合進行計算。
"execution_hint": "map"
國內解釋最詳細的版本來自Wood大叔:
Map方式的結論可簡要概括如下:
1)查詢結果直接放入內存中構建map,在查詢結果集小的場景下,速度極快;
2)但如果待結果集合很大的情況,map方式不一定也快。
優化方案N:
待進一步深入實踐......
聚合的平衡點是多少呢?
場景一:在近億的document中,檢索滿足給定條件的數據,并對聚合結果全量聚合。
場景二:在百萬級別的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”,默認是global_ordinals模式。
3)”size”: 1000,設定聚合取值。
以上是“Elasticsearch如何實現聚合優化”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。