我想在我的项目中使用Spring Data Elasticsearch,我看到了:
从Elasticsearch 7.0.0开始不推荐使用众所周知的TransportClient,并且有望在Elasticsearch 8.0中将其删除。
我的方法是仅使用Spring Data Elasticsearch进行CRUD操作(类似于ORM),并使用High Level REST Client进行搜索,其余的都使用。
因此,我想知道ElasticsearchRepository使用哪个客户端来执行其操作,以及该代码是否在Elasticsearch 8.0版中不再有效。
使用版本3.1.5是否仍然是一个明智的决定?
答案 0 :(得分:5)
一如既往,这取决于。
关于Elasticsearch:当前版本为6.7.0,尽管已弃用TransportClient,但ES7也将提供该功能,但仅在ES8中将被删除,因此有很多时间可以使用它-尽管您应该考虑更换它。
关于spring-data-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时,您只有带有3.2.x的TransportClient(当前可作为里程碑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>
答案 1 :(得分:1)
是的,它确实使用了传输客户端