如何使用Elasticsearch Java API构建同级聚合?

怀特

我想做一个过滤器聚合,嵌套聚合,然后是3个同级聚合。我已经对此进行了测试,并且可以使用REST API进行工作。这是我使用的查询:

{
  "aggs": {
    "filter_agg": {
      "filter": {
        ...
      },
      "aggs": {
        "nested_agg": {
          "nested": {
            "path": "myProperty"
          },
          "aggs": {
            "sibling_agg_1": {
              ...
            },
            "sibling_agg_2": {
              ...
            },
            "sibling_agg_3": {
              ...
            }
          }
        }
      }
    }
  }
}

现在,我想使用代码库中的Java API来实现此查询。我不确定如何进行同级汇总,因为唯一可用的方法FilterAggregationBuildersubAggregation()

在Java API的上下文中,这些兄弟聚合是子聚合吗?

我开始编写的Java代码如下所示:

client.prepareSearch(index)
    .setTypes(types)
    .setSearchType(SearchType.COUNT)
    .addAggregation(myFilterAggregation
      .subAggregation(AggregationBuilders.nested("nested_agg").path("myProperty"))

然后,我唯一可以继续做的就是构建more-SearchRequestBuildersubAggregation实现此目标的正确方法吗?在这种情况下,REST API和Java API似乎有所不同。

您可以通过向子聚合中添加子聚合来做到这一点nested(请注意,我选择了一种terms聚合,因为从查询DSL尚不清楚它使用了哪种特定的聚合类型作为同级聚合):

// create the nested aggregation
NestedBuilder nestedAgg = AggregationBuilders.nested("nested_agg").path("myProperty");

// now add each of your sub-aggregation to it
nestedAgg.subAggregation(AggregationBuilders.terms("sibling_agg_1").field("field1"));
nestedAgg.subAggregation(AggregationBuilders.terms("sibling_agg_2").field("field2"));
nestedAgg.subAggregation(AggregationBuilders.terms("sibling_agg_3").field("field3"));

// finally add the nested aggregation to the filter aggregation
client.prepareSearch(index)
    .setTypes(types)
    .setSearchType(SearchType.COUNT)
    .addAggregation(myFilterAggregation
      .subAggregation(nestedAgg);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用ElasticSearch Java API从JSON构建聚合

使用Java API的Elasticsearch聚合

使用 Java 的 ElasticSearch 聚合

如何在SearchResponse中使用elasticSearch Java API访问聚合结果?

使用JAVA的Elasticsearch嵌套聚合

使用Elasticsearch 1.x进行Java API聚合

使用Java API的Elasticsearch

如何使用Elasticsearch Java API创建通配符查询?

如何使用Java API重写ElasticSearch DSL查询

如何使用Java API编写此Elasticsearch查询

如何使用Java API设置提取附件(elasticsearch)插件选项?

如何在ElasticSearch上将hasChildFilter与JAVA API结合使用

如何使用ElasticSearch Java API生成以下查询

elasticsearch Java API 中的多个平均聚合

Elasticsearch 6.1.1 Java Api,缺少子聚合

Elasticsearch Java API-构建查询

如何使用Elasticsearch Java Api使用query_string创建查询

Java的ElasticSearch聚合

Elasticsearch java api:如何像在 dsl 中使用 _source:[] 一样定义字段

Elasticsearch-Java RestHighLevelClient-如何使用滚动API获取所有文档

如何使用Java API删除Elasticsearch索引中的所有内容而不是映射

如何使用elasticsearch rangequery在Java API中查找小于或等于数字值的值

Elasticsearch 如何在 must_not 中添加 bool 查询并在 java API 中使用多个匹配?

Elasticsearch java客户端api复合聚合

通过将条件语句与Java Api结合使用来构建ElasticSearch BoolQuery

如何使用elasticsearch python API正确构建查询?

如何在Java中编写Elasticsearch查询聚合?

使用Java API进行Elasticsearch排序

使用Java API检查并插入Elasticsearch