Integrating Spring Boot with Apache Solr for Full-Text Search

Hello, Java developers! In this post, we’ll explore how to integrate Apache Solr with Spring Boot to enable powerful full-text search capabilities in your applications. Solr is an open-source search platform built on Apache Lucene, providing features such as powerful full-text search, faceted search, and real-time indexing.

Why Use Apache Solr?

Apache Solr is widely used for its scalability and powerful search features, making it ideal for applications that require advanced searching:

  • Full-Text Search: Solr provides powerful full-text search capabilities with support for multi-language analysis.
  • Faceted Search: It allows you to categorize search results based on various attributes.
  • Ecosystem: Integrates well with various platforms and frameworks, including Spring Boot.
  • Scalability: Solr is designed to handle large amounts of data and high query volumes.

Setting Up Solr

Before we get started with the integration, ensure that you have Apache Solr installed and running. You can download it from the Apache Solr website.

Once installed, start Solr with:

bin/solr start

Creating a Spring Boot Application with Solr

Now, let’s set up a new Spring Boot project that will connect to Solr.

Step 1: Generate a New Spring Boot Project

Use Spring Initializr to create your application, and include the following dependencies:

  • Spring Web
  • Spring Data Solr

Step 2: Add Dependencies

Your pom.xml should include:

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

Indexing Data with Solr

Before searching data, you need to index it in Solr. Let’s create a simple entity and repository:

Step 3: Define a Solr Document

import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;
import org.springframework.data.solr.core.mapping.Field;

@SolrDocument(collection = "products")
public class Product {
    @Id
    @Field
    private String id;
    @Field
    private String name;
    @Field
    private double price;

    // Constructors, getters, and setters
    public Product() {}

    public Product(String id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

This Product class is annotated as a Solr document with fields for ID, name, and price.

Step 4: Creating a Solr Repository

Create a repository interface for accessing the Product documents:

import org.springframework.data.solr.repository.SolrCrudRepository;

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

The ProductRepository interface extends SolrCrudRepository, which gives you access to basic CRUD operations.

Creating a Rest Controller

Let’s create a controller to expose endpoints for your product operations:

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

import java.util.List;

@RestController
@RequestMapping("/products")
public class ProductController {
    @Autowired
    private ProductRepository productRepository;

    @GetMapping
    public List<Product> getAllProducts() {
        return (List<Product>) productRepository.findAll();
    }

    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productRepository.save(product);
    }
}

This ProductController defines endpoints to retrieve all products and create a new product.

Testing Your Application

Run your Spring Boot application and navigate to:

  • GET http://localhost:8080/products – Retrieve all products.
  • POST http://localhost:8080/products – Add a new product with the following JSON body:
  • {
        "id": "1",
        "name": "Sample Product",
        "price": 10.99
    }

Best Practices for Using Spring Data Solr

  • Define Search Indexing Strategies: Determine how you will index data based on search queries effectively.
  • Monitor Solr Performance: Regularly analyze Solr’s performance metrics to ensure the efficiency and performance of your queries.
  • Use Projections and Paging: Implement projections to limit data overload and improve search performance for large datasets.

Conclusion

Integrating Spring Boot with Apache Solr allows you to build applications that provide robust search capabilities efficiently. Using Spring Data Solr simplifies the interaction with the Solr service, making it easy to implement powerful searching solutions in your applications.

Want to learn more about Java Core? Join the Java Core in Practice course now!

To learn more about ITER Academy, visit our website.

Scroll to Top