Агрегация Elasticsearch всегда показывает только 10 результатов - PullRequest
0 голосов
/ 18 октября 2019

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

Map<String, BucketStats> hourAggregations = new HashMap<>();
    SearchResponse getResponse = client.prepareSearch( ElasticSearchConstants.INDEX ).setTypes( ElasticSearchConstants.TABLE)
            .addAggregation( AggregationBuilders.terms( "name")
                    .field( "empId" )
                    .subAggregation( AggregationBuilders.stats( "stats" )
            .setQuery( query )
            .setFrom( 0 )
            .setSize( ( offset + 1 ) * 10 )
            .execute().actionGet();

    Terms terms = getResponse.getAggregations().get("name");
    for ( Terms.Bucket bucket : terms.getBuckets() )
    {
    //buckets showing only 10 results
    }

1 Ответ

1 голос
/ 18 октября 2019

Необходимо указать размер агрегации terms:

Map<String, BucketStats> hourAggregations = new HashMap<>();
SearchResponse getResponse = client.prepareSearch( ElasticSearchConstants.INDEX ).setTypes( ElasticSearchConstants.TABLE)
        .addAggregation( AggregationBuilders.terms( "name")
                .field( "empId" )
-->             .size(100)
                .subAggregation( AggregationBuilders.stats( "stats" )
        .setQuery( query )
        .setFrom( 0 )
        .setSize( ( offset + 1 ) * 10 )
        .execute().actionGet();

Вызов setSize() влияет только на секцию hits, т. Е. На документ, заданный в результатах, а не на агрегации. На мой взгляд, вы должны назвать setSize(0), потому что вам нужны только значения агрегации, а не документы.

...