使用Spring boot写一个搜索系统
时间: 2024-05-02 09:21:17 浏览: 108
Spring Boot是一个快速开发框架,可以帮助你快速构建一个搜索系统。下面是一个简单的搜索系统的示例代码:
1. 添加依赖
在 pom.xml 文件中添加以下依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
```
2. 配置 Elasticsearch
在 application.properties 文件中添加以下配置:
```
spring.data.elasticsearch.cluster-name=myClusterName
spring.data.elasticsearch.cluster-nodes=localhost:9300
```
3. 创建实体类
创建一个名为 `Product` 的实体类,用于表示搜索结果:
```
@Data
@Document(indexName = "product")
public class Product {
@Id
private String id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Double)
private Double price;
@Field(type = FieldType.Keyword)
private String category;
}
```
4. 创建 Elasticsearch Repository
创建一个名为 `ProductRepository` 的 Elasticsearch Repository:
```
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
List<Product> findByName(String name);
List<Product> findByCategory(String category);
List<Product> findByNameAndCategory(String name, String category);
}
```
5. 创建搜索 API
创建一个名为 `ProductController` 的 Spring Boot Controller,用于接收搜索请求并返回搜索结果:
```
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductRepository productRepository;
@GetMapping
public List<Product> search(
@RequestParam(required = false) String name,
@RequestParam(required = false) String category) {
if (name != null && category != null) {
return productRepository.findByNameAndCategory(name, category);
} else if (name != null) {
return productRepository.findByName(name);
} else if (category != null) {
return productRepository.findByCategory(category);
} else {
return Collections.emptyList();
}
}
}
```
6. 测试搜索 API
运行 Spring Boot 应用程序并访问以下 URL:
```
http://localhost:8080/products?name=iphone
```
将返回所有名为 `iphone` 的产品。你也可以按类别搜索:
```
http://localhost:8080/products?category=手机
```
将返回所有类别为 `手机` 的产品。你也可以同时按名称和类别搜索:
```
http://localhost:8080/products?name=iphone&category=手机
```
这将返回所有名称为 `iphone` 并且类别为 `手机` 的产品。
阅读全文