Introdução: O Elasticsearch é um mecanismo de pesquisa de código aberto amplamente utilizado, capaz de realizar buscas complexas em grande volume de dados de forma rápida e eficiente. O Spring Boot, por sua vez, é um framework popular para construção de aplicações em Java, que proporciona muitas facilidades, entre elas a integração com diversos sistemas, incluindo o Elasticsearch. Neste guia, vamos mostrar como integrar o Elasticsearch com o Spring Boot, criando uma aplicação de busca de dados completa.
Passo 1: Configurando o Elasticsearch O primeiro passo é configurar o Elasticsearch no projeto Spring Boot. Para isso, é necessário adicionar as dependências do Elasticsearch e configurar um cliente para acessar o servidor. No arquivo pom.xml, adicione as seguintes dependências:
xmlCopy code<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.15.0</version>
</dependency>
Agora, crie uma classe de configuração para o Elasticsearch:
javaCopy code@Configuration
public class ElasticSearchConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Bean(destroyMethod = "close")
public RestHighLevelClient client() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost(host, port, "http")));
}
}
Aqui, estamos criando um cliente para acessar o servidor Elasticsearch na porta especificada no arquivo application.properties.
Passo 2: Indexando dados no Elasticsearch Agora que o Elasticsearch está configurado, vamos criar um índice e indexar alguns dados para realizar as buscas. Para isso, crie uma classe para representar os dados que serão indexados:
javaCopy code@Document(indexName = "produtos")
public class Produto {
@Id
private String id;
private String nome;
private String descricao;
private Double preco;
// getters e setters omitidos
}
A anotação @Document indica que essa classe representa um documento no Elasticsearch. O atributo indexName especifica o nome do índice que será criado para armazenar os documentos. Agora, vamos criar um repositório para acessar o Elasticsearch:
javaCopy code@Repository
public class ProdutoRepository {
private final RestHighLevelClient client;
@Autowired
public ProdutoRepository(RestHighLevelClient client) {
this.client = client;
}
public void save(Produto produto) throws IOException {
IndexRequest request = new IndexRequest("produtos")
.id(produto.getId())
.source(new ObjectMapper().writeValueAsString(produto), XContentType.JSON);
client.index(request, RequestOptions.DEFAULT);
}
public List<Produto> search(String query) throws IOException {
SearchRequest searchRequest = new SearchRequest("produtos");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryStringQuery(query));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hits = searchResponse