在 Spring 项目里实现对 Solr 的操作,一般借助 Spring Data Solr 来达成。Spring Data Solr 能简化和 Solr 交互的流程,下面为你详细介绍具体步骤:
1. 添加依赖
若你使用的是 Maven 项目,需要在 pom.xml
里添加如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
2. 配置 Solr
在 application.properties
或者 application.yml
中对 Solr 的连接信息进行配置。
application.properties
示例
spring.data.solr.host=http://localhost:8983/solr
application.yml
示例
spring:
data:
solr:
host: http://localhost:8983/solr
3. 创建实体类
构建与 Solr 文档对应的实体类,并且使用注解来映射字段。
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;
import org.springframework.data.solr.core.mapping.Indexed;
@SolrDocument(collection = "your_collection_name")
public class Product {
@Id
@Indexed(name = "id", type = "string")
private String id;
@Indexed(name = "name", type = "string")
private String name;
@Indexed(name = "description", type = "text_general")
private String description;
// 构造函数、getter 和 setter 方法
public Product() {
}
public Product(String id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
4. 创建 Repository 接口
创建一个继承自 SolrCrudRepository
的接口,以此来实现对 Solr 的基本 CRUD 操作。
import org.springframework.data.solr.repository.SolrCrudRepository;
public interface ProductRepository extends SolrCrudRepository<Product, String> {
}
5. 使用 Repository 进行操作
在服务类或者控制器中使用 ProductRepository
来进行对 Solr 的操作。
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 void saveProduct(Product product) {
productRepository.save(product);
}
public Product getProductById(String id) {
return productRepository.findById(id).orElse(null);
}
public List<Product> getAllProducts() {
return (List<Product>) productRepository.findAll();
}
public void deleteProduct(String id) {
productRepository.deleteById(id);
}
}
6. 测试操作
在控制器中测试上述操作:
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 void saveProduct(@RequestBody Product product) {
productService.saveProduct(product);
}
@GetMapping("/{id}")
public Product getProductById(@PathVariable String id) {
return productService.getProductById(id);
}
@GetMapping
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable String id) {
productService.deleteProduct(id);
}
}
综上所述,在 Spring 项目里实现对 Solr 的操作,需要添加依赖、配置 Solr、创建实体类和 Repository 接口,接着在服务类和控制器中运用 Repository 进行操作。
下面是完整的代码示例,我将以 doubaocanvas
的形式展示给你:
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
application.properties
spring.data.solr.host=http://localhost:8983/solr
Product.java
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;
import org.springframework.data.solr.core.mapping.Indexed;
@SolrDocument(collection = "your_collection_name")
public class Product {
@Id
@Indexed(name = "id", type = "string")
private String id;
@Indexed(name = "name", type = "string")
private String name;
@Indexed(name = "description", type = "text_general")
private String description;
// 构造函数、getter 和 setter 方法
public Product() {
}
public Product(String id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
ProductController.java
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 void saveProduct(@RequestBody Product product) {
productService.saveProduct(product);
}
@GetMapping("/{id}")
public Product getProductById(@PathVariable String id) {
return productService.getProductById(id);
}
@GetMapping
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable String id) {
productService.deleteProduct(id);
}
}
ProductRepository.java
import org.springframework.data.solr.repository.SolrCrudRepository;
public interface ProductRepository extends SolrCrudRepository<Product, String> {
}
ProductService.java
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 void saveProduct(Product product) {
productRepository.save(product);
}
public Product getProductById(String id) {
return productRepository.findById(id).orElse(null);
}
public List<Product> getAllProducts() {
return (List<Product>) productRepository.findAll();
}
public void deleteProduct(String id) {
productRepository.deleteById(id);
}
}