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.properties或application.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
注意事项
-
版本兼容性:确保Spring Data Elasticsearch的版本与Elasticsearch服务器版本兼容。
-
索引映射:实体类的字段需要与Elasticsearch索引的映射一致。
-
错误处理:可以通过全局异常处理器来处理Elasticsearch操作中的异常。
浙公网安备 33010602011771号