在elasticsearch中仅获取聚合结果

ntjbwcob  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(513)

我是这样做的:

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

我只想得到聚合结果。所以当我开始 size=0 如下所示,它给出了一个错误,后来才知道这是我想要多少结果(聚合)。那么,我如何才能做到这一点,只得到聚合结果(没有命中结果文档)

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

此外,如果我得到数千个聚合结果,这个查询会返回所有这些结果吗?还是应用到默认的10大小?如果不是,我怎么知道应该设置多少聚合结果的大小。
编辑我正在添加聚合,如下所示:

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

请帮忙。

5anewei6

5anewei61#

在不在聚合级别的searchrequest示例上执行此操作:

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();

据我所知,springdataes不允许您创建 PageRequest 大小为0(因此我选择1)。如果这是一个问题,这个答案会告诉你如何覆盖这个行为。
默认情况下,聚合将返回10个bucket,但如果需要,可以将大小增加到10000。

相关问题