Elasticsearch Java API: фильтр агрегации для подсчета количества документов

#elasticsearch #elasticsearch-java-api #elasticsearch-aggregation

#elasticsearch #elasticsearch-java-api #elasticsearch-агрегация

Вопрос:

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

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

 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 . Смотрите здесь их документацию по этому вопросу. Я не использовал Java API, но этот пример, похоже, использует .minDocCount() в примере (ctrl-f ‘minDocCount’)