0

Я хочу реализовать агрегацию, которая возвращает документы, частота которых превышает определенный порог.Elasticsearch Java API: фильтр агрегации для количества документов

Например, здесь агрегация, чтобы получить все документы, с их подсчетами

AggregationBuilder aggregation = AggregationBuilders 
       .terms("agg").field("column_name"); 

так что это дает мне счетчик документов для каждого значения в column_name

[{"doc_count":30,"key":"val1"},{"doc_count":29,"key":"val2"},{"doc_count":23,"key":"val3"}] 

сейчас, позволяет скажем, я не хочу всех этих документов. Я только хочу, чтобы те, которые имеют doc_count больше 25

Так идеальный результат будет

[{"doc_count":30,"key":"val1"},{"doc_count":29,"key":"val2"}]

как я применить такой фильтр для моей агрегации? Я смотрел на FilterBuilders и фильтровал агрегации, но они предназначены для применения фильтров по любым значениям в документах. Например, я могу применить фильтр только для получения документов, где val1 == xza для column_name

но это не то, что я ищу. Я хочу применить пороговое значение для значений doc_cunt после применения агрегации.

Возможно ли это? Я использую elasticsearch java api версия 1.7.2

ответ

1

Сводка терминов имеет встроенную опцию, которая называется min_doc_count. См. here для их документации по нему. Я не использовал Java API, но this example, кажется, использует .minDocCount() в примере (ctrl-f 'minDocCount')

+0

спасибо! это было – AbtPst

Смежные вопросы