添加Elasticsearch依赖
首先,在pom.xml
文件中添加Spring Boot和Elasticsearch的依赖:
<!-- Spring Boot Starter Data Elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- Elasticsearch Client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.16.0</version> <!-- 可能需要根据你的Elasticsearch版本进行调整 -->
</dependency>
配置Elasticsearch连接信息
在application.properties
或application.yml
文件中配置Elasticsearch连接信息:
使用application.properties
配置:
# Elasticsearch properties
spring.elasticsearch.rest.uris=http://localhost:9200
使用application.yml
配置:
spring:
elasticsearch:
rest:
uris: http://localhost:9200
定义实体类
定义一个简单的实体类,作为索引中的文档:
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "books", createIndex = true)
public class Book {
@Id
private String id;
private String title;
private String author;
// 省略构造函数、getter和setter
}
创建Elasticsearch操作接口
创建一个接口来定义对Elasticsearch的操作:
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;
public interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findByTitle(String title);
@Query("{\"match\": {\"author\": \"?0\"}}")
List<Book> findByAuthorQuery(String author);
}
实现CRUD操作
在服务类或控制器中使用BookRepository
进行CRUD操作:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookRepository bookRepository;
@PostMapping
public Book addBook(@RequestBody Book book) {
return bookRepository.save(book);
}
@GetMapping("/{id}")
public Book getBook(@PathVariable String id) {
return bookRepository.findById(id).orElse(null);
}
@PutMapping("/{id}")
public Book updateBook(@PathVariable String id, @RequestBody Book book) {
book.setId(id); // 设置要更新的文档的ID
return bookRepository.save(book);
}
@DeleteMapping("/{id}")
public void deleteBook(@PathVariable String id) {
bookRepository.deleteById(id);
}
@GetMapping("/title/{title}")
public List<Book> findByTitle(@PathVariable String title) {
return bookRepository.findByTitle(title);
}
@GetMapping("/author/{author}")
public List<Book> findByAuthor(@PathVariable String author) {
return bookRepository.findByAuthorQuery(author);
}
}
示例说明
Book
类:使用@Document
注解指定了索引名称和是否自动创建索引。BookRepository
接口:继承自ElasticsearchRepository
,定义了一些基本的查询方法和自定义的查询方法。BookController
类:使用BookRepository
进行CRUD操作的示例控制器,包括添加、获取、更新和删除文档,以及根据标题和作者进行查询。
注意事项
- 确保Elasticsearch服务器已经启动,并且配置信息(如端口、主机)正确匹配。
- 在实际项目中,你可能需要根据具体的业务需求,定义更多的查询方法或者对查询结果进行处理。
- 需要根据你的Elasticsearch版本来选择合适的
elasticsearch-rest-high-level-client
版本,并进行相应的依赖管理。
通过这些步骤,你可以在Spring Boot应用程序中轻松地集成Elasticsearch,并实现对其的CRUD操作。