Миграция ElasticSearch Java API FacetFilter (в ранней версии) на аналогичную агрегацию в ES v5.5.3

Я переношу приложение Grails с помощью Elasticsearch Java v0.93 на версию 5.5.3. Одной из проблем, с которыми я сталкиваюсь, является миграция Facet Filter на аналогичный Агрегация.

Ниже приведен код из ранней версии Elasticsearch Java API:

FacetBuilders
    .termsFacet("f").field("brand").size(50) // Your facet
    .allTerms(true)
    .facetFilter( // Your filter here
        FilterBuilders.boolFilter()
    );

В соответствии с Elasticsearch Java API «Facets были удалены, и рекомендуется использовать агрегация фильтров или фильтрует агрегацию.

Спасибо!


person Puneet Behl    schedule 13.09.2018    source источник
comment
Прошло много времени, но в основном вы хотите получить 50 самых распространенных (брендовых) терминов без фильтра? Это должен быть прямой агрегация терминов   -  person xeraa    schedule 13.09.2018
comment
@xeraa что ты имеешь в виду под без фильтра? Кроме того, у FilterBuilders.boolFilter() есть другие фильтры must, которые я не упомянул в этом вопросе.   -  person Puneet Behl    schedule 13.09.2018


Ответы (1)


Пожалуйста, попробуйте запрос ниже, чтобы перенести facets на Aggregation

AggregationBuilders.filter("Filter By Some Property", QueryBuilders.termQuery("some Field", "value"))
            .subAggregation(AggregationBuilders.terms("Group By Some Other property").field("brand").size(50));

Здесь вы можете использовать любой тип запроса в методе filter. Использовали Term Query только в качестве примера.

Надеюсь, поможет!!

person Richa    schedule 13.09.2018