2016-05-31 55 views
2

我是新來的elasticsearch,並試圖執行一個查詢,做類似的過濾和分組。ElasticSearch聚合 - 篩選和分組由

我能夠過濾(通過使用過濾器)和通過查詢使用'terms'執行一個組,但不能建立一個同時執行這兩個操作的查詢。

這是我不進行分組

{ 
    "size": 0, 
    "aggs": { 
    "group_by_city": { 
     "filter": { 
      "bool": { 
       "must": [ 
       { 
        "term": { 
        "account": "a" 
        } 
       }, 
       { 
        "term": { 
        "appName": "b" 
        } 
       }, 
       { 
        "range": { 
        "timestamp": { 
         "from": 1464713893304, 
         "to": 1465022700000 
        } 
        } 
       } 
       ] 
      } 
      }, 
     "aggs": { 
     "average_timing": { 
      "avg": { 
      "field": "t.timing1" 
      } 
     } 
     } 
    } 
    } 
} 

對於我使用分組查詢:

{ 
    "size": 0, 
    "aggs": { 
    "group_by_country": { 
     "terms": { 
     "field": "country" 
     }, 
     "aggs": { 
     "average_balance": { 
      "avg": { 
      "field": "t.timing1" 
      } 
     } 
     } 
    } 
    } 
} 

任何想法如何,我可以將二者結合起來?

+0

顯示不起作用的查詢。 – AndreKR

回答

1

當我們需要對來自ElasticSearch的數據子集進行一些分析時,我們遇到了類似的問題。我設法通過結合filteraggs來解決這個問題。根據您的問題,我能想到的是這樣的:

{ 
    "size": 0, 
    "filter": { 
     "bool": { 
      "must": [ 
       { 
        "term": { "account": "a" } 
       }, 
       { 
        "term": { "appName": "b" } 
       }, 
       { 
        "range": { 
         "timestamp": { 
          "from": 1464713893304, 
          "to": 1465022700000 
         } 
        } 
       } 
      ] 
     } 
    }, 
    "aggs": { 
     "group_by_country": { 
      "terms": { "field": "country" }, 
      "aggs": { 
       "average_balance": { 
        "avg": { 
         "field": "t.timing1" 
        } 
       } 
      } 
     } 
    } 
} 

我希望我對你的問題的理解是正確的,這可以幫助你。

+0

是的,那工作,謝謝! – danieln