Usando Elasticsearch com Spring Boot: Um guia completo

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *