2016-08-08 1 views
1

Я пытаюсь получить информацию об агрегировании в Elasticsearch.Elasticsearch получает размер блока агрегации (количество элементов в ковше) без получения всех данных

У меня есть индекс, в котором хранятся метаданные почты (ip-адрес отправителя, тема и т. Д.). Я пытаюсь сделать так, чтобы получить количество IP-адресов, которые отправляют более 1000 писем. (Так, например, скажем, у нас есть 3 IP адреса, 2000 почты отправляются с первого IP, 1500 от второго и 200 от третьего IP. Затем я хочу видеть как результат агрегации.) Я написал следующий запрос:

GET /my_index/_search 
{ 
    "size": 0, 
    "aggs": { 
     "ipAddresses": { 
     "terms": { 
      "field": "senderIpAddress", 
      "min_doc_count": 1000, 
      "size" : 0 
     } 
     } 

    } 
} 

я могу получить ведро и рассчитать его размер в моей фоновым реализации, однако мне нужно, чтобы получить все данные в ведре, чтобы сделать это. Он медленный, и я хочу получить размер ведра без получения всех данных.

TL; DR, как я могу получить общий размер агрегатного ведра без получения всего данных?

+0

У меня есть точная проблема сейчас. У вас есть решение? – LLS

ответ

0

Это цель cardinality агрегации:

{ 
"size": 0, 
"aggs": { 
    "ipAddressesCount": { 
     "cardinality": { 
      "field": "senderIpAddress" 
     } 
    } 
    } 
} 

Имейте в виду, что это приближение - точность может быть сконфигурирован с использованием precision_threshold, как описано в ссылке выше.

+0

Я знаю, что такое агрегация мощности. Если вы внимательно прочитаете, что я упомянул, я хочу увидеть количество IP-адресов, из которых отправлено более 1000 писем. Если я просто сделаю простую мощность, то в конце дня мы будем считать IP-адреса, на которые отправлено менее 1000 писем. – user2604150