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
Post a Comment