<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ES系列九、ES優化聚合查詢之深度優先和廣度優先

      1.優化聚合查詢示例

      假設我們現在有一些關于電影的數據集,每條數據里面會有一個數組類型的字段存儲表演該電影的所有演員的名字。
      {
        "actors" : [
          "Fred Jones",
          "Mary Jane",
          "Elizabeth Worthing"
        ]
      }

           如果我們想要查詢出演影片最多的十個演員以及與他們合作最多的演員,使用聚合是非常簡單的:

           {
        "aggs" : {
          "actors" : {
            "terms" : {
               "field" : "actors",
               "size" :  10
            },
            "aggs" : {
              "costars" : {
                "terms" : {
                  "field" : "actors",
                  "size" :  5
                }
              }
            }
          }
        }
      }

       

           這會返回前十位出演最多的演員,以及與他們合作最多的五位演員。這看起來是一個簡單的聚合查詢,最終只返回 50 條數據!
           但是, 這個看上去簡單的查詢可以輕而易舉地消耗大量內存,我們可以通過在內存中構建一個樹來查看這個 terms 聚合。 actors 聚合會構建樹的第一層,每個演員都有一個桶。然后,內套在第一層的每個節點之下, costar 聚合會構建第二層,每個聯合出演一個桶。這意味著每部影片會生成 n2 個桶!
       

      2.深度優先和廣度優先原理

           Elasticsearch 允許我們改變聚合的 集合模式 ,就是為了應對這種狀況。 我們之前展示的策略叫做 深度優先 ,它是默認設置, 先構建完整的樹,然后修剪無用節點。 深度優先 的方式對于大多數聚合都能正常工作,但對于如我們演員和聯合演員這樣例子的情形就不太適用。
           為了應對這些特殊的應用場景,我們應該使用另一種集合策略叫做 廣度優先 。這種策略的工作方式有些不同,它先執行第一層聚合, 再 繼續下一層聚合之前會先做修剪。
       
           在我們的示例中, actors 聚合會首先執行,在這個時候,我們的樹只有一層,但我們已經知道了前 10 位的演員!這就沒有必要保留其他的演員信息,因為它們無論如何都不會出現在前十位中。因為我們已經知道了前十名演員,我們可以安全的修剪其他節點。修剪后,下一層是基于 它的 執行模式讀入的,重復執行這個過程直到聚合完成。
           要使用廣度優先,只需簡單 的通過參數 collect 開啟:
      {
        "aggs" : {
          "actors" : {
            "terms" : {
               "field" :        "actors",
               "size" :         10,
               "collect_mode" : "breadth_first"
            },
            "aggs" : {
              "costars" : {
                "terms" : {
                  "field" : "actors",
                  "size" :  5
                }
              }
            }
          }
        }
      }

       

           廣度優先僅僅適用于每個組的聚合數量遠遠小于當前總組數的情況下,因為廣度優先會在內存中緩存裁剪后的僅僅需要緩存的每個組的所有數據,以便于它的子聚合分組查詢可以復用上級聚合的數據
           廣度優先的內存使用情況與裁剪后的緩存分組數據量是成線性的。對于很多聚合來說,每個桶內的文檔數量是相當大的。 想象一種按月分組的直方圖,總組數肯定是固定的,因為每年只有12個月,這個時候每個月下的數據量可能非常大。這使廣度優先不是一個好的選擇,這也是為什么深度優先作為默認策略的原因。
           針對上面演員的例子,如果數據量越大,那么默認的使用深度優先的聚合模式生成的總分組數就會非常多,但是預估二級的聚合字段分組后的數據量相比總的分組數會小很多所以這種情況下使用廣度優先的模式能大大節省內存,從而通過優化聚合模式來大大提高了在某些特定場景下聚合查詢的成功率。

      posted on 2018-08-20 23:27  小人物的奮斗  閱讀(4285)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 亚洲精品不卡av在线播放| 国产无遮挡又黄又爽免费网站| 亚洲国产女性内射第一区| 亚洲中文字幕一区二区| 动漫AV纯肉无码AV电影网| 久久这里都是精品二| 国产成人无码A区在线观| 久热综合在线亚洲精品| 国产精品美女www爽爽爽视频| 亚洲乱熟女一区二区三区| 一出一进一爽一粗一大视频| 国产免费性感美女被插视频| 免费久久人人爽人人爽AV| 思思热在线视频精品| 国产精品一区二区三区激情| 黄页网址大全免费观看| 色综合久久婷婷88| 亚洲一区在线成人av| 成人h动漫精品一区二区无码| 狼人大伊人久久一区二区| 国产超碰无码最新上传| 国产福利在线观看免费第一福利| 久久久久久久久毛片精品| 国产日韩精品视频无码| 一区二区三区四区高清自拍| 国内熟妇人妻色在线视频| 亚洲午夜无码久久久久蜜臀av| 绝顶丰满少妇av无码| 精品无码三级在线观看视频| 国产成人片无码视频| 4399理论片午午伦夜理片| 亚洲欧美成人a∨观看| 成人无码潮喷在线观看| 国内精品久久黄色三级乱| 四虎在线成人免费观看| 亚洲一精品一区二区三区| 欧美熟妇性XXXX欧美熟人多毛| 久久精品国产99久久久古代| 久久精品免费自拍视频| 97亚洲熟妇自偷自拍另类图片| 日韩有码中文字幕av|