2016-07-22 85 views
0

我正在尋找在另一個字段上過濾之後在字段上執行聚合的方式。但是,彈性搜索文檔不容易理解。字段上的聚合並返回elasticsearch中的總和

比方說我的映射:

[ 
    { 
    a:'a1' 
    b:'b1' 
    c:120 
    d:12 
    }, 
    { 
    a:'a2' 
    b:'b1' 
    c:170 
    d:15 
    } 
    { 
    a:'a3' 
    b:'b2' 
    c:128 
    d:18 
    } 
    { 
    a:'a4' 
    b:'b1' 
    c:158 
    d:5 
    } 
] 

必需的聚合:

Return the sum of field "c", by selecting the docs with "b" where b=b1 and d is less than 13 

這不是我的要求,但得到的答覆幫助我理解文檔。

回答

1

試試這個:

POST index/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "b": "b1" 
      } 
     }, 
     { 
      "range": { 
      "d": { 
       "lt": 13 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "total": { 
     "sum": { 
     "field": "c" 
     } 
    } 
    } 
} 
+0

的聚合正在發生的一整套文件,但我想現場的「c」的總和與術語「b」和「d」選定文檔 –

+0

那是什麼上面呢。查詢只選擇字段爲'b'和'd'的文檔匹配它們各自的查詢,並且聚合將僅在這些文檔上運行。試試看。 – Val

+0

{ 「AGGS」:{ 「總」:{ 「總和」:{ 「場」: 「c」 的 } } } .......也返回相同的值作爲上面的查詢。我無法弄清楚這裏的過濾。 –