Агрегаты в упругом поиске - PullRequest
0 голосов
/ 12 марта 2019

Я изучаю агрегацию в упругом поиске.

Индексный документ:

{
    "_index": "Sample",
    "_type": "demo",
    "_id": "Demo1",
    "_score" : 1.0,
    "_source": {
      "NAME": " aaaesh",
       "EMAILADDRESS": "siillai@example.com",
       "LASTUPD": "25-NOV-2018 06:11:06",
    }
}

Мне нужно заказать LASTUPD Date в порядке desc и Group Email Address и взять только последнюю запись. Я пытался использовать раздел в агрегации.

Ниже мой код Java:

    for (int i = 0; i < 10; i++) {
        SearchRequestBuilder requestBuilder = client.prepareSearch(index).setTypes(type).setFrom(from).setSize(size)
                .addSort("LASTUPD", SortOrder.DESC)
                .addAggregation(AggregationBuilders.terms("by_email").field("EMAILADDRESS").size(10000)
                        .subAggregation(AggregationBuilders.topHits("by_email_addr").size(1))
                        .includeExclude(new IncludeExclude(i, 10)));

        QueryBuilder qb = QueryBuilders.queryStringQuery(query);
        SearchResponse response = requestBuilder.setQuery(qb).get();

        Terms clientTerm = response.getAggregations().get("by_email");
        for (Terms.Bucket clientTermBucket : clientTerm.getBuckets()) {
            TopHits clientTermTopHits = clientTermBucket.getAggregations().get("by_email_addr");

            for (SearchHit d : clientTermTopHits.getHits().getHits()) {
                System.out.println(d.getSourceAsMap());
            }

        }
    }

Задача:

Мне также нужно выполнить индексацию, как и в случае агрегирования на основе результата из

(client.prepareSearch(index).setTypes(type).setFrom(from).setSize(size))

Пример: в запросе, если я передам 0, начиная с 10, как Размер. Он должен получить результат от 0 до 10 и выполнить агрегирование.

Ток: Принимается весь документ в индексе и выполняется агрегация.

...