Spring-Data-Elasticsearch 在后台使用什么 Elasticsearch 客户端?
What Elasticsearch client does Spring-Data-Elasticsearch use under the hood?
我想在我的项目中使用 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-data-elasticsearch:
- 当使用
ElasticsearchTemplate
时,您正在使用 TransportClient。
- 当使用
ElasticsearchRestTemplate
时,您正在使用 RestClient(在 3.2.0 中可用)。
- 使用默认设置时
ElasticsearchRepository
您正在使用 TransportClient。
- 当使用自定义存储库扩展时
SimpleElasticsearchRepository
如下所示,您正在使用 RestClient。
配置示例class:
@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());
}
}
样本库class:
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}
示例 POJO class:
@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-* 属性,因为这些属性将注入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>
我想在我的项目中使用 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-data-elasticsearch:
- 当使用
ElasticsearchTemplate
时,您正在使用 TransportClient。 - 当使用
ElasticsearchRestTemplate
时,您正在使用 RestClient(在 3.2.0 中可用)。 - 使用默认设置时
ElasticsearchRepository
您正在使用 TransportClient。 - 当使用自定义存储库扩展时
SimpleElasticsearchRepository
如下所示,您正在使用 RestClient。
配置示例class:
@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());
}
}
样本库class:
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}
示例 POJO class:
@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-* 属性,因为这些属性将注入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>