【问题标题】:Getting only aggregations results in elasticsearch在弹性搜索中仅获取聚合结果
【发布时间】:2020-08-25 20:59:41
【问题描述】:

我正在做这样的聚合:

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

请帮忙。

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

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

    据我所知,Spring Data ES 不允许您创建大小为 0 的 PageRequest(因此我选择了 1)。如果这是一个问题,this answer 会向您展示如何覆盖该行为。

    默认情况下,您的聚合将返回 10 个存储桶,但如果需要,您可以将大小增加到 10000。

    【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多