asticsearch_dsl ответ несколько агрегаций ведра - PullRequest
0 голосов
/ 02 октября 2018

нашла эту ветку о том, как сгруппировать вложенные агрегации с использованиемasticsearch_dsl Создать несколько сегментов в агрегации

Может кто-нибудь показать, как перебрать ответ для получения результатов второго сегмента?

for i in s.aggregations.clients.buckets.num_servers.buckets:

не работает, как еще добраться до контента в num_servers или server_list?

1 Ответ

0 голосов
/ 02 октября 2018

Вам нужно два цикла, если вы хотите пройти через агрегацию второго уровня.Вот пример, предполагающий поля 'label' и 'number' в вашем индексе:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, A

client = Elasticsearch()

# Build a two level aggregation
my_agg = A('terms', field='label')
my_agg.bucket('number', A('terms', field='number'))

# Build and submit the query
s = Search(using=client, index="stackoverflow")
s.aggs.bucket('label', my_agg)

response = s.execute()

# Loop through the first level of the aggregation
for label_bucket in response.aggregations.label.buckets:
    print "Label: {}, {}".format(label_bucket.key, label_bucket.doc_count)

    # Loop through the 2nd level of the aggregation
    for number_bucket in label_bucket.number.buckets:
        print "  Number: {}, {}".format(number_bucket.key, number_bucket.doc_count)

Что бы напечатать что-то вроде этого:

Label: A, 3
  Number: 2, 2
  Number: 1, 1
Label: B, 3
  Number: 3, 2
  Number: 1, 1
...