#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’)