2016-04-22 2 views
1

Я пытаюсь выполнить агрегацию на term, а затем выполнить подагрегирование результатов теста результатов для фильтрации результатов в диапазоне дат. Но фильтр суб-агрегации не влияет на ответ поиска. Ответ поиска всегда возвращает все документы без применения filter.Подкатегория Elasticsearch не работает как ожидалось

Например:

TermsBuilder aggregationBuilders = AggregationBuilders.terms("form.id").field("form.id").size(0); 
     aggregationBuilders.subAggregation(AggregationBuilders.filter("indexDate").filter(QueryBuilders.rangeQuery("indexDate").lte(date))); 

ответ

1

Вы должны использовать filter скоплениями наоборот, то есть в качестве верхней агрегации, а затем вы добавляете terms агрегации в качестве суб-агрегации.

TermsBuilder formBuckets = AggregationBuilders.terms("form.id") 
    .field("form.id") 
    .size(0); 

FilterBuilder dateFilter = AggregationBuilders.filter("indexDate") 
    .filter(QueryBuilders.rangeQuery("indexDate").lte(date)) 
    .subAggregation(formBuckets); 

Я вижу в вашем other question, вы каким-то образом «решить» эту проблему, перемещая фильтр indexDate в раздел запроса. Это также будет работать в вашем случае.

+0

Спасибо за ответ. Да, я решил фильтрацию, сделав запрос bool вместе с запросом диапазона. Теперь работает Фильтрация, и агрегация на form.id также работает, но как-то верхние хиты работают не так, как ожидалось. Можете ли вы это просмотреть? [Link] (http://stackoverflow.com/questions/36805072/elasticsearch-top-hits-aggregation-java-api-query) –

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