2016-07-22 9 views
0

Я работаю над поиском способов сделать скопления на поле после фильтрации на другой поданной. Но поисковая документация Elastic не легко понятна.Агрегация в поле и возврат суммы в elasticsearch

Допустим, мой Mapping:

[ 
    { 
    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 
    } 
] 

Необходимое Aggregation:

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

В агрегации происходит на всем наборе документов, но я хотел сумму поля «с» для выбранных документов с термином «б» и «г» –

+0

Вот что выше. Запрос выбирает только документы с полями 'b' и' d', соответствующие их соответствующим запросам, и агрегирования будут выполняться только по этим документам. Попробуйте. – Val

+0

{ "Aggs": { "всего": { "сумма": { "поле": "с" }} } ....... также возвращение и то же значение, что и выше запроса. Я не могу определить фильтрацию здесь. –