Integrating Elasticsearch with a Spring Boot application

Integrating Elasticsearch with a Spring Boot application involves configuring the necessary dependencies, setting up a connection, and using Elasticsearch's REST client or Spring Data Elasticsearch to interact with the database. Here's a step-by-step guide:

1. Add Dependencies

Add the following dependencies in your pom.xml (for Maven) or build.gradle (for Gradle).

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>


Gradle:

implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'


2. Configure Elasticsearch Properties

In your application.properties or application.yml, specify the connection settings for Elasticsearch:

application.properties:

spring.elasticsearch.uris=http://localhost:9200
spring.elasticsearch.username=your_username
spring.elasticsearch.password=your_password


application.yml:

spring:
  elasticsearch:
    uris: http://localhost:9200
    username: your_username
    password: your_password

Ensure your Elasticsearch instance is running and accessible at the specified URI.


3. Define a Model Class

Create a class representing your Elasticsearch document and annotate it with @Document.

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "product")
public class Product {

    @Id
    private String id;
    private String name;
    private double price;
    private String description;

    // Getters and setters
}


4. Create a Repository

Use Spring Data Elasticsearch's repository interface to interact with Elasticsearch.

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    // Custom query methods can be defined here
}


5. Service Layer

Create a service to handle business logic.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Optional<Product> getProductById(String id) {
        return productRepository.findById(id);
    }

    public Iterable<Product> getAllProducts() {
        return productRepository.findAll();
    }

    public void deleteProduct(String id) {
        productRepository.deleteById(id);
    }
}


6. Controller

Expose APIs to interact with Elasticsearch.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @PostMapping
    public Product saveProduct(@RequestBody Product product) {
        return productService.saveProduct(product);
    }

    @GetMapping("/{id}")
    public Optional<Product> getProductById(@PathVariable String id) {
        return productService.getProductById(id);
    }

    @GetMapping
    public Iterable<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable String id) {
        productService.deleteProduct(id);
    }
}


7. Testing the Application

  • Run your Spring Boot application. 
  • Use tools like Postman or curl to interact with your API endpoints. 
  • Verify data in Elasticsearch using Kibana or Elasticsearch's REST API.

Additional Features: 

  • Use custom queries with Elasticsearch's query DSL by annotating repository methods with @Query. 
  • Implement paginated searches with Pageable.

Comments

Popular posts from this blog

Spring Boot OpenAI Integration: Step-by-Step Guide

Orchestration-Based Saga Architecture and Spring Boot Microservices Implementation Guide

Spring Boot 3 + Angular 15 + Material - Full Stack CRUD Application Example