Как получить количество различных значений в столбце (поле) в индексе elasticsearch

Я пытаюсь получить количество всех строк и количество различных значений в столбце, используя пакет elasticsearch-dsl в python.
Я новичок в elasticsearch, поэтому прошу прощения, если задаю глупый вопрос, но Я прочитал всю доступную документацию по этому вопросу и не мог понять это. Любая помощь в этом будет оценена по достоинству!

Для подсчета всех строк я использую '.aggs.metric(), который работает нормально, а для подсчета различных значений я пробовал .bucket('terms') и .bucket('cardinality '), который не возвращает то, что я хочу.

Для общего количества строк:

s = Search(using=client, index="<index_name>")
s.aggs.metric('total', 'sum', field = '<column>')
s = s.execute()
s.aggregations.total.value

Для подсчета различных значений в столбце:

s = Search(using=client, index="brandcleanerv2")
s.aggs.metric('by_cluster', 'cardinality', field='cluster')
s = s.execute()

Второй фрагмент кода возвращает 10 строк, я также пытался использовать параметр «terms» внутри .bucket(), но он вернул количество вхождений каждого отдельного значения в столбце, и это тоже только для 10 значений.


person Vaibhav    schedule 05.02.2019    source источник


Ответы (1)


Вы должны получить доступ к s.aggregations.by_cluster.value (после запуска execute()), чтобы получить результат агрегации cardinality, который делает то, что вы хотите.

person Honza Král    schedule 06.02.2019