Integrating AWS OpenSearch with Spring Boot (Index, Search, Pagination & Aggregation)
- 4.0/5
- 274
- Jan 05, 2025
In this post, we'll explore how to integrate AWS OpenSearch with a Spring Boot application to perform key operations such as indexing, searching, pagination, and aggregation.
Prerequisites
Before starting with the integration, ensure you have the following:
1) An AWS OpenSearch domain: You can create it via the AWS Management Console.
2) A Spring Boot application: If you don't have one already, you can create a Spring Boot app using Spring Initializr. Maven or Gradle for managing dependencies.
Integrating AWS OpenSearch with Spring Boot
Add Dependencies
Start by adding the necessary dependencies in your pom.xml (for Maven users):
Configure OpenSearch in application.yml
Next, configure the OpenSearch client to connect to your OpenSearch domain by adding the following to your application.yml:
Make sure you replace your-opensearch-domain, your-username, and your-password with your actual OpenSearch domain details.
Define the Entity Class
Define the entity class you want to index in OpenSearch. For example, let’s consider a Book entity:
Here, we are annotating the class with @Document to indicate that this class should be indexed in OpenSearch. We also use @Field annotations to define how each field should be indexed.
Create the Repository Interface
Create a repository interface that extends ElasticsearchRepository for performing CRUD operations:
This repository interface will allow us to easily interact with OpenSearch without writing any custom query logic.
Service Class to Handle Indexing, Searching, and Aggregations
Now, let's create a service class where we'll define methods to handle indexing, searching, pagination, and aggregation.
In the service class, we have three key operations:
Indexing: The 'saveBook' and 'saveBooks' methods will index new book(s) in OpenSearch.
Searching with Pagination: The 'searchBooks' method performs a search with pagination, making it efficient for large datasets.
Aggregation: The 'countBooksByGenre' method is used to count number of books in a genre using aggregation.
Controller Class
Finally, create a REST controller to expose these operations via API endpoints:
Testing and Verifying the Integration
Swagger UI provides an interactive documentation interface where you can directly test the API endpoints, including those for indexing, searching, and aggregating OpenSearch data.
Start your Spring Boot application by running the following command: mvn spring-boot:run
After the application starts, you should be able to access Swagger UI at the following URL: http://localhost:8080/swagger-ui/index.html
This will bring up the Swagger UI interface, where you can interactively test the APIs.
Source Code: GitHub