2015-05-14 75 views
0

我是新增的彈性搜索,我想對其實施特定用例。我想要一個多場總和聚合。我會嘗試在例子來解釋: 我有以下插入ES索引對象:多個字段上的彈性搜索聚合

{"a":"aval", "b":"bval", "c":"cval", "aggcount":100} 

其中a,b和是字符串,aggcount是一個int。 現在讓我們假設我有以下記錄索引:

{"a":"aa", "b":"bb", "c":"cc", "aggcount":10} 
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11} 
{"a":"aa", "b":"b", "c":"c", "aggcount":1} 
{"a":"a", "b":"bb", "c":"cc", "aggcount":12} 
{"a":"a", "b":"bb", "c":"cc", "aggcount":5} 

現在我想通過場想組記錄a,b和c和總結他們的aggcount值,所以對於以前的紀錄,我會得到以下結果:

{"a":"aa", "b":"bb", "c":"cc", "count":21} 
{"a":"aa", "b":"b", "c":"c", "count":1} 
{"a":"a", "b":"bb", "c":"cc", "aggcount":17} 

有人能告訴我如何做到這一點?我嘗試嵌套significant_terms和總和聚合,但我沒有成功。 在此先感謝。

回答

1

使用子聚合:

{ 
    "aggs": { 
    "aggs_a": { 
     "terms": { 
     "field": "a" 
     }, 
     "aggs": { 
     "aggs_b": { 
      "terms": { 
      "field": "b" 
      }, 
      "aggs": { 
      "aggs_c": { 
       "terms": { 
       "field": "c" 
       }, 
       "aggs": { 
       "summing": { 
        "sum": { 
        "field": "aggcount" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

測試數據和結果:

POST /test_index/test_type/_bulk 
{"index":{}} 
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10} 
{"index":{}} 
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11} 
{"index":{}} 
{"a":"aa", "b":"b", "c":"c", "aggcount":1} 
{"index":{}} 
{"a":"a", "b":"bb", "c":"cc", "aggcount":12} 
{"index":{}} 
{"a":"a", "b":"bb", "c":"cc", "aggcount":5} 

給出:

"hits": { 
     "total": 5, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "aggs_a": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
      { 
       "key": "aa", 
       "doc_count": 3, 
       "aggs_b": { 
        "doc_count_error_upper_bound": 0, 
        "sum_other_doc_count": 0, 
        "buckets": [ 
        { 
         "key": "bb", 
         "doc_count": 2, 
         "aggs_c": { 
          "doc_count_error_upper_bound": 0, 
          "sum_other_doc_count": 0, 
          "buckets": [ 
           { 
           "key": "cc", 
           "doc_count": 2, 
           "summing": { 
            "value": 21 
           } 
           } 
          ]}}, 
        { 
         "key": "b", 
         "doc_count": 1, 
         "aggs_c": { 
          "doc_count_error_upper_bound": 0, 
          "sum_other_doc_count": 0, 
          "buckets": [ 
           { 
           "key": "c", 
           "doc_count": 1, 
           "summing": { 
            "value": 1 
           } 
           } 
          ]}]} 
      }, 
      { 
       "key": "a", 
       "doc_count": 2, 
       "aggs_b": { 
        "doc_count_error_upper_bound": 0, 
        "sum_other_doc_count": 0, 
        "buckets": [ 
        { 
         "key": "bb", 
         "doc_count": 2, 
         "aggs_c": { 
          "doc_count_error_upper_bound": 0, 
          "sum_other_doc_count": 0, 
          "buckets": [ 
           { 
           "key": "cc", 
           "doc_count": 2, 
           "summing": { 
            "value": 17 
           } 
           } 
          ] 
}}]}}]}}} 
+0

這正是我所做的,但它是超級慢,我不知道如何瀏覽結果,目前我只收到一個結果 - 我的意思是隻有一個頂級lvl聚合,並且應該有許多我不知道如何訪問下一個 – homar

+0

這聽起來像是您嘗試使用的客戶端的問題。你還沒有提到任何有關這個 –

+0

我只是想用奇蹟插件來寫一個叫做sense的查詢。正如我所說我是一個不錯的人,我的方法是不正確的嗎? – homar