2016-07-22 73 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” 的 } } } .......也返回相同的值作为上面的查询。我无法弄清楚这里的过滤。 –

相关问题