Я хочу использовать 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 для выполнения своих операций, и будет ли код больше недействителен в версии 8.0 Elasticsearch.
Это все еще хорошее решение использовать версию 3.1.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 у вас есть только TransportClient, с 3.2.x, в настоящее время доступный как веха M2, вы также можете использовать RestClient.
Убедитесь, что ваш application.yaml (или .properties) не имеет каких-либо свойств spring.data.elasticsearch.cluster-*, так как они будут внедрять шаблон ElasticsearchTemplate (транспортный клиент).
И вам нужно будет установить правильную версию elasticsearch и spring-data-elasticsearch в вашем pom (отрывок):
<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>