elasticsearchOperations使用聚合查询进行多字段去重,如何获取bucket中的数据

elasticsearchOperations使用聚合查询进行多字段去重,如何获取bucket中的数据

NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
List<CompositeValuesSourceBuilder<?>> listValuesSource =new ArrayList<>();


TermsValuesSourceBuilder titleValuesSourceBuilder = new TermsValuesSourceBuilder("title");
titleValuesSourceBuilder.field("title.keyword");
listValuesSource.add(titleValuesSourceBuilder);
TermsValuesSourceBuilder dateValuesSourceBuilder = new TermsValuesSourceBuilder("date");
dateValuesSourceBuilder.field("date.keyword");
listValuesSource.add(dateValuesSourceBuilder);

CompositeAggregationBuilder compositeAggregationBuilder = AggregationBuilders.composite("deduplicate",listValuesSource);
nativeSearchQueryBuilder.addAggregation(compositeAggregationBuilder);

NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
Page<Map> data = elasticsearchOperations.queryForPage(searchQuery,Map.class);//<------应该用哪个方法获取聚合查询bucket中的数据

【相关推荐】



  • 这篇文章讲的很详细,请看:Elasticsearch超强聚合函数(四) buckets的嵌套使用
  • 除此之外, 这篇博客: 【谷粒商城】ElasticSearch、上架与检索中的 Buckets分析信息 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    // 3.2 获取检索到的分析信息
    Aggregations aggregations = response.getAggregations();
    Terms agg21 = aggregations.get("agg2");
    for (Terms.Bucket bucket : agg21.getBuckets()) {
        String keyAsString = bucket.getKeyAsString();
        System.out.println(keyAsString);
    }
    

    搜索address中包含mill的所有人的年龄分布以及平均年龄,平均薪资

    GET bank/_search
    {
      "query": {
        "match": {
          "address": "Mill"
        }
      },
      "aggs": {
        "ageAgg": {
          "terms": {
            "field": "age",
            "size": 10
          }
        },
        "ageAvg": {
          "avg": {
            "field": "age"
          }
        },
        "balanceAvg": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^