springboot整合elasticsearch最新版本
时间: 2023-07-04 19:03:35 浏览: 198
首先,确保你已经安装了 Elasticsearch 并启动了服务。接下来,可以按照以下步骤整合 Spring Boot 和 Elasticsearch。
1. 添加 Elasticsearch 依赖
在 pom.xml 文件中添加 Elasticsearch 的依赖:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.1</version>
</dependency>
```
2. 配置 Elasticsearch 连接
在 application.properties 文件中添加 Elasticsearch 连接配置:
```properties
spring.elasticsearch.rest.uris=http://localhost:9200
```
3. 定义 Elasticsearch 实体类
定义一个实体类,用于与 Elasticsearch 进行数据交互。例如,定义一个名为 `Book` 的实体类:
```java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(indexName = "book")
public class Book {
@Id
private String id;
private String title;
private String author;
}
```
注解说明:
- `@Data`:生成 getter、setter 方法等。
- `@NoArgsConstructor` 和 `@AllArgsConstructor`:生成无参构造函数和全参构造函数。
- `@Builder`:生成一个建造者模式的构造器。
- `@Document(indexName = "book")`:表明该实体类对应 Elasticsearch 中的 `book` 索引。
4. 定义 Elasticsearch 数据访问层
定义一个数据访问层接口,用于对 Elasticsearch 进行数据操作。例如,定义一个名为 `BookRepository` 的接口:
```java
public interface BookRepository extends ElasticsearchRepository<Book, String> {
}
```
注解说明:
- `@ElasticsearchRepository`:继承自 Spring Data Elasticsearch,提供了丰富的数据访问方法。
5. 测试 Elasticsearch 数据访问
在 Spring Boot 应用中使用 `BookRepository` 进行数据访问。例如,定义一个名为 `BookService` 的服务类:
```java
@Service
@AllArgsConstructor
public class BookService {
private final BookRepository bookRepository;
public void save(Book book) {
bookRepository.save(book);
}
public List<Book> search(String keyword) {
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("title", keyword))
.should(QueryBuilders.matchQuery("author", keyword));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.build();
return bookRepository.search(searchQuery).get().map(SearchHit::getContent).collect(Collectors.toList());
}
}
```
注解说明:
- `@Service`:声明该类是一个 Spring Bean。
- `@AllArgsConstructor`:生成一个全参构造函数。
- `bookRepository`:通过构造函数进行依赖注入。
- `save` 方法:保存一本书到 Elasticsearch 中。
- `search` 方法:根据关键词搜索书籍。
6. 测试 Elasticsearch 数据访问
最后,可以编写一个测试类来测试 Elasticsearch 数据访问。例如,定义一个名为 `BookServiceTest` 的测试类:
```java
@SpringBootTest
class BookServiceTest {
@Autowired
private BookService bookService;
@BeforeEach
void setUp() {
bookService.save(Book.builder().id("1").title("Java").author("Tom").build());
bookService.save(Book.builder().id("2").title("C++").author("Jack").build());
bookService.save(Book.builder().id("3").title("Python").author("Chris").build());
}
@Test
void search() {
List<Book> books = bookService.search("Java");
assertThat(books).hasSize(1);
assertThat(books.get(0).getTitle()).isEqualTo("Java");
}
}
```
注解说明:
- `@SpringBootTest`:声明该类是一个 Spring Boot 测试类。
- `bookService`:通过自动注入进行依赖注入。
- `setUp` 方法:在每个测试方法执行前,先向 Elasticsearch 中添加三本书籍。
- `search` 方法:根据关键词 `Java` 搜索书籍,并断言返回的结果。
以上就是整合 Spring Boot 和 Elasticsearch 的步骤。
阅读全文