gpt4 book ai didi

java - Spring-Data-Elasticsearch 在后台使用什么 Elasticsearch 客户端?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:39 26 4
gpt4 key购买 nike

我想在我的项目中使用 Spring Data Elasticsearch,我看到了这个:

The well known TransportClient is deprecated as of Elasticsearch 7.0.0 and is expected to be removed in Elasticsearch 8.0.

我的方法是只使用 Spring Data Elasticsearch 来执行 CRUD 操作(类似 ORM),并使用高级 REST 客户端进行搜索和所有其他操作。所以我想知道 ElasticsearchRepository 使用哪个客户端来执行其操作,以及代码是否在 Elasticsearch 8.0 版本中不再有效。
使用 3.1.5 版本仍然是一个好的决定吗?

最佳答案

一如既往,这取决于。

关于 Elasticsearch:当前版本为 6.7.0,TransportClient 也将在 ES7 中可用,虽然已弃用,但只会在 ES8 中删除,因此还有相当长的时间可以使用它 - 尽管您应该考虑更换它。

关于 Spring 数据 Elasticsearch :

  • 在使用 ElasticsearchTemplate 时,您正在使用 TransportClient。
  • 当使用 ElasticsearchRestTemplate 时,您正在使用 RestClient(在 3.2.0 中可用)。
  • 当使用默认的 ElasticsearchRepository 时,您正在使用 TransportClient。
  • 当使用自定义存储库扩展例如 SimpleElasticsearchRepository 时,如下所示,您正在使用 RestClient。

示例配置类:

@SpringBootApplication
@EnableElasticsearchRepositories
public class SpringdataElasticTestApplication {

public static void main(String[] args) {
SpringApplication.run(SpringdataElasticTestApplication.class, args);
}

@Bean
RestHighLevelClient elasticsearchClient() {
final ClientConfiguration configuration = ClientConfiguration.localhost();
RestHighLevelClient client = RestClients.create(configuration).rest();
return client;
}

@Bean
ElasticsearchRestTemplate elasticsearchTemplate() {
return new ElasticsearchRestTemplate(elasticsearchClient());
}
}

示例存储库类:

public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}

示例 POJO 类:

@Document(indexName = "person")
public class Person {
@Id
private Long id;
private String lastName;
private String firstName;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
}

因此,当使用 3.1.x 时,您只有 TransportClient,对于 3.2.x,目前作为里程碑 M2 可用,您也可以使用 RestClient。

确保您的 application.yaml(或 .properties)没有任何 spring.data.elasticsearch.cluster-* 属性,因为这些属性将注入(inject) ElasticsearchTemplate(传输客户端) .

并且您需要在 pom 中设置正确版本的 elasticsearch 和 spring-data-elasticsearch(摘录):

<properties>
<elasticsearch.version>6.6.1</elasticsearch.version>
</properties>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<!-- need 3.2.0 for REST client-->
<version>3.2.0.M2</version>
</dependency>

<repository>
<id>Spring-Framework-Milestone</id>
<name>Spring Framework Milestone</name>
<url>http://maven.springframework.org/milestone/</url>
</repository>

关于java - Spring-Data-Elasticsearch 在后台使用什么 Elasticsearch 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com