Spring Boot集成Spring Data Elasticsearch:从零开始的详细教程

1. 添加依赖

pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.26</version> <!-- 根据实际使用的Elasticsearch版本调整 -->
</dependency>

2. 配置Elasticsearch

application.propertiesapplication.yml文件中配置Elasticsearch的连接信息:

# Elasticsearch配置
spring.data.elasticsearch.cluster-name=your-cluster-name
spring.data.elasticsearch.cluster-nodes=your-cluster-nodes
spring.data.elasticsearch.username=your-username
spring.data.elasticsearch.password=your-password

3. 创建实体类

定义一个实体类,映射到Elasticsearch的索引:

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 String description;
    // 省略getter和setter方法
}

4. 创建Repository接口

定义一个继承自ElasticsearchRepository的接口,用于操作Elasticsearch:

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

public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    List<Product> findByName(String name);
}

5. 创建Service层

在Service层中注入Repository,并实现业务逻辑:

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

import java.util.List;

@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

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

    public List<Product> searchProducts(String query) {
        return productRepository.findByName(query);
    }
}

6. 创建Controller层

定义Controller,暴露REST接口:

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 ProductService productService;

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

    @GetMapping("/search")
    public List<Product> searchProducts(@RequestParam String query) {
        return productService.searchProducts(query);
    }
}

7. 启动Elasticsearch

可以通过Docker启动Elasticsearch:

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.17.1
docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.17.1

8. 测试

启动Spring Boot应用后,可以通过以下方式测试:

  • 添加产品:

    curl -X POST -H "Content-Type: application/json" -d '{"name":"Product A","description":"This is product A"}' http://localhost:8080/products
    
  • 搜索产品:

    curl http://localhost:8080/products/search?query=Product
    

注意事项

  1. 版本兼容性:确保Spring Data Elasticsearch的版本与Elasticsearch服务器版本兼容。

  2. 索引映射:实体类的字段需要与Elasticsearch索引的映射一致。

  3. 错误处理:可以通过全局异常处理器来处理Elasticsearch操作中的异常。

posted @ 2025-02-21 13:30  软件职业规划  阅读(1359)  评论(0)    收藏  举报