2015-06-19 2 views
0

Я пытаюсь получить сумму некоторого поля, с термином (скажем, количеством файлов конкретного пользователя с id).Elasticsearch - как получить сумму поля с условиями?

Сначала я попробовал:

_mainManager.Client.Search<object> 
      (q => q 
      .Type("Mail") 
      .Filter(c => c.Term("SentMail_Sender_Id", userId)) 
      .Aggregations(a => a.Terms("sum", g => g.Field("SentMail_Upload_Files_Count"))) 
      .Size(1)); 

Но не повезло в Agg собственности :(

_mainManager.Client.Search<object> 
      (q => q 
      .Type("Mail") 
      .Aggregations(a => a.Filter("fil", b => b.Filter(c => c.Term("SentMail_Sender_Id", userId))).Sum("sum", f => f.Field("SentMail_Upload_Files_Count")))); 

Но чем снова не повезло там Может кто-нибудь помочь

ответ

0

Следующий код.? дает вам результат, который вам нужен:

PUT /mail/message/1 
{ 
    "SentMail_Sender_Id":1, 
    "SentMail_Upload_Files_Count":10 
} 

PUT /mail/message/2 
{ 
    "SentMail_Sender_Id":1, 
    "SentMail_Upload_Files_Count":2 
} 

PUT /mail/message/3 
{ 
    "SentMail_Sender_Id":2, 
    "SentMail_Upload_Files_Count":7 
} 

GET /mail/_search?search_type=count 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "term": { 
      "SentMail_Sender_Id": 1 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "total": { 
     "stats": { 
     "field": "SentMail_Upload_Files_Count" 
     } 
    } 
    } 
} 

Ответ:

"aggregations": { 
     "total": { 
     "count": 2, 
     "min": 2, 
     "max": 10, 
     "avg": 6, 
     "sum": 12 
     } 
    } 
Смежные вопросы