Estoy haciendo agregación como esta:

  {
   "size":0,
   "aggs":
    {
      "my_aggs":
      {
         "terms":
          {
            "field":"my_field"
          }
      }
   }
}

Quiero obtener solo el resultado de la agregación. Entonces, cuando configuro size=0 como se muestra a continuación, da un error: más tarde aprendí que esto es para la cantidad de resultados que quiero (agregaciones). Entonces, ¿cómo puedo lograr esto para obtener solo los resultados de la agregación (sin documentos de resultados de visitas)?

AbstractAggregationBuilder aggregationBuilder = AggregationBuilders
                .terms("my_aggs")
                .field("my_field")
                .size(0) //how to set size for my purpose?
                .order(BucketOrder.key(true));

Además, si obtengo miles de resultados de agregación, ¿esta consulta los devuelve todos? o aplicar a su tamaño predeterminado 10? Si no es así, ¿cómo puedo saber cuántos debo establecer el tamaño del resultado de agregación?


Editar Estoy agregando mi agregación de esta manera:

 SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withIndices(indexName)
                .withTypes(typeName)
                .withQuery(boolQueryBuilder)
                .addAggregation(aggregationBuilder)
                .build();

Por favor, ayúdeme.

1
user404 25 ago. 2020 a las 15:27

1 respuesta

La mejor respuesta

Lo hace en la instancia de SearchRequest, no en el nivel de agregación:

AbstractAggregationBuilder aggregationBuilder = AggregationBuilders
            .terms("my_aggs")
            .field("my_field")
            .order(BucketOrder.key(true));

SearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withIndices(indexName)
            .withTypes(typeName)
            .withQuery(boolQueryBuilder)
            .withPageable(new PageRequest(0, 1))       <--- add this
            .addAggregation(aggregationBuilder)
            .build();

Hasta donde yo sé, Spring Data ES no le permite crear un PageRequest con tamaño 0 (por eso elegí 1). Si eso es un problema, esta respuesta le muestra cómo anular ese comportamiento.

De forma predeterminada, su agregación devolverá 10 depósitos, pero puede aumentar el tamaño hasta 10000, si es necesario.

2
Val 25 ago. 2020 a las 12:59