【问题标题】:Scroll over aggregations with Elastic Search使用 Elastic Search 滚动聚合
【发布时间】:2014-06-29 10:19:13
【问题描述】:

我正在使用 Elastic Search 和聚合作为我的文档的请求。我的聚合是对特定字段的术语聚合。

我希望能够获取所有聚合,但请求只返回第 10 个。我尝试使用弹性搜索的滚动,但是它是在请求上应用而不是在聚合上,返回的文档滚动良好,但聚合还是一样。

有人遇到同样的问题吗?

这是我在 java 中的请求:

SearchResponse response = client.prepareSearch("index").setTypes("type").setQuery(QueryBuilders.matchAllQuery())
                .addAggregation(AggregationBuilders.terms("TermsAggr").field("aggField")).execute().actionGet();

这就是我得到桶的方式:

    Terms terms = response.getAggregations().get("TermsAggr");
    Collection<Bucket> buckets = terms.getBuckets();

【问题讨论】:

    标签: java elasticsearch aggregation


    【解决方案1】:

    聚合结果的默认返回大小是 10 个项目,这就是为什么您只能返回 10 个结果。您需要将AggregationBuilders 对象上的size 设置为更大的值,以便返回存储桶中的更多或所有值。

     SearchResponse response = client.prepareSearch("index")
          .setTypes("type")
          .setQuery(QueryBuilders.matchAllQuery())
          .addAggregation(AggregationBuilders.terms("TermsAggr")
               .field("aggField").size(100))
          .execute().actionGet();
    

    如果你总是想返回所有值,你可以设置size(0)。但是,您需要升级到 ES 1.1,因为这是最近通过 Issue 4837 添加到该版本的。

    【讨论】:

    • 事实上我想拥有所有的聚合,而不仅仅是其中的一些。这是不可能的。顺便说一句,我使用的是 ES 1.0.1。
    • 在生产中它当然会增长,但我使用的是基于 500000 个项目。这里的问题是这些项目的数量会增加,因此我不能使用 size 方法,因为我不知道每时每刻我应该收到多少聚合。
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多