Eu quero usar Primavera Dados ElasticSearch no meu projeto e eu vi isso:
O TransportClient bem conhecido é suspenso a partir de ElasticSearch 7.0.0 e é esperado para ser removido em ElasticSearch 8,0.
Minha abordagem é apenas para usar o Spring Dados ElasticSearch fazer operações CRUD (ORM-like), e Alto Nível cliente REST para pesquisar e todo o resto. Então, eu quero saber qual cliente é o ElasticsearchRepository usando para executar suas operações, e se o código não será válido na versão 8.0 do ElasticSearch.
Ainda é uma boa decisão para usar a versão 3.1.5?
Como sempre, depende.
Sobre ElasticSearch: a versão atual é 6.7.0, TransportClient estará disponível em ES7 bem embora desaconselhável, mas só será removido em ES8, para que haja bastante tempo para usá-lo - embora você deve pensar em substituí-lo.
Sobre primavera-data-ElasticSearch:
- quando se usa
ElasticsearchTemplate
, você está usando o TransportClient. - quando se utiliza
ElasticsearchRestTemplate
você estiver usando o RESTClient (disponível em 3.2.0). - quando se utiliza um padrão
ElasticsearchRepository
que você está usando o TransportClient. - quando se utiliza um repositório personalizado estendendo-se por exemplo
SimpleElasticsearchRepository
como mostrado abaixo você estiver usando o RESTClient.
amostra de classe de configuração :
@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());
}
}
amostra de classe repositório:
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}
amostra de classe 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;
}
}
Assim, ao usar 3.1.x, você só tem a TransportClient, com 3.2.x, atualmente disponível como marco M2, você pode usar o RESTClient também.
Certifique-se de que o seu application.yaml (ou .properties) não tem qualquer um dos spring.data.elasticsearch.cluster- * propriedades, como estes irão injetar o ElasticsearchTemplate (Transportes Cliente).
E você vai precisar para ambos conjunto a versão correta do ElasticSearch e da primavera-data-ElasticSearch em sua pom (trecho):
<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>