2015-12-15 138 views
0

我有多個主機 - >多個URL - >,並且我想在URL基礎上執行兩個聚合。一個用於響應代碼,另一個用於響應時間的百分位。Elasticsearch中的多個嵌套聚合

我試圖做這些相同的,但它拋出異常:

找到兩個子聚合方法

我的查詢:

"aggs" : { 
    "host" : { "terms" : { "field" : "hostname" }, 
    "aggs":{ 
    "request": { "terms":{ "field" : "request" }, 
    "aggs":{ 
     "status" : { "terms" : { "field" : "responsecode" }}}, 
     "aggs":{ 
      "percen" : { "percentiles" : { "field" : "response_time", "percents" : [50,75,90,95,99] }}, 
      "avrg" : { "avg" : { "field" : "response_time" } 
}}}}}} 

確實彈性僅搜索支持嵌套一次一個字段的聚合?

+0

YES你可以同時創建多個嵌套的aggs。這對我來說不是嵌套的語法。你的地圖是什麼 – AlainIb

回答

0

你的一個子聚合的不正確的嵌套在您的查詢,您需要刪除一些括號(見下文),取決於你想要的percenavrg聚集到包含:

"aggs" : { 
    "host" : { "terms" : { "field" : "hostname" }, 
    "aggs":{ 
    "request": { "terms":{ "field" : "request" }, 
    "aggs":{ 
     "status" : { "terms" : { "field" : "responsecode" }}}, 
                  ^^ 
                  || 
               remove these two braces 

     "aggs":{ 
      "percen" : { "percentiles" : { "field" : "response_time", "percents" : [50,75,90,95,99] }}, 
      "avrg" : { "avg" : { "field" : "response_time" } 
}}}}}} 
+0

這是否適合你? – Val

+0

對不起,我正在休假幾天,所以無法查看它.. @Val,是的,它會工作,但它會計算每個status_code的百分位和avrg。即它將通過主機名 - >請求 - >響應碼 - > {百分位數,avrg} 做聚合。根據請求計算百分比和平均不響應代碼即 它將通過主機名 - >請求 - > { responsecode,percentiles,avrg} –