从 Elastic 7 更新到 8 后的 AggregationsContainer(+Spring 3、JDK 17)

问题描述 投票:0回答:1

亲爱的社区您好,

我已将 Spring Boot 升级到 3.1.5,将 JDK 升级到 17,并将 ElasticSearch 从 7.x 升级到 8.x,现在我遇到的问题是找不到如何重构聚合的解决方案,其中仍然有一个 .get (String x) 版本 4.0.0.RELEASE 中的方法,以便它们在我当前使用的 spring-data-elasticsearch 版本中工作。由于我对 ElasticSearch 的世界还比较陌生,我还想问一下使用的依赖项是否与 ES8 兼容?据我了解,ES8版本中不再使用其余的高级客户端,而是使用java客户端。那是对的吗?如果能得到一些帮助,我会非常高兴! :)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  <version>3.1.1</version> <!--Last version is 3.2.0-->
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-elasticsearch</artifactId>
  <version>4.3.6</version> <!--Last version is 5.2.0-->
</dependency>
<dependency>
  <groupId>co.elastic.clients</groupId>
  <artifactId>elasticsearch-java</artifactId>
  <version>8.11.1</version> <!--Is last version-->
</dependency>

public static Set<Integer> getAggregations(SearchHits<ElasticSearchArticleDto> search, String aggregation)
  {
    Set<Integer> result = new LinkedHashSet<>();
    if (search.getAggregations() != null && (search.getAggregations()).**get**(aggregation) != null)
    {
      ((ParsedLongTerms) (search.getAggregations()).**get**(aggregation)).getBuckets()
        .forEach(bucket -> result.add(bucket.getKeyAsNumber().intValue()));
    }
    return result;
}

Spring Boot 3.1.5、Java 17、ES8 升级

java elasticsearch spring-data-elasticsearch elasticsearch-high-level-restclient
1个回答
0
投票

我怀疑这个版本组合是否有效

  • Spring Boot 3.1 使用 Spring Data Elasticsearch 5.1 和 Elasticsearch 8.7、Spring 6
  • Spring Data Elasticsearch 4.3 是使用 Spring 5.3 和 Elasticsearch 7.15 构建的

对于从 Spring Data Elasticsearch 5 开始返回的聚合,您必须检查从 Elasticsearch 库返回的类,Spring Data Elasticsearch 不使用它自己的类。

© www.soinside.com 2019 - 2024. All rights reserved.