springBoot + elasticsearch实现
时间: 2023-05-31 18:06:45 浏览: 135
1. 添加依赖
在`pom.xml`文件中添加以下依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
```
2. 配置elasticsearch
在`application.properties`文件中添加以下配置:
```
spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
```
`cluster-name`表示elasticsearch集群的名称,`cluster-nodes`表示elasticsearch节点的地址。这里只有一个节点。
3. 创建实体类
创建一个实体类,用于映射elasticsearch中的文档。例如:
```
@Document(indexName = "my_index", type = "my_type")
public class MyDocument {
@Id
private String id;
private String name;
private String content;
// 省略getter和setter方法
}
```
`@Document`注解表示该类是一个elasticsearch文档,`indexName`表示文档所在的索引名称,`type`表示文档的类型。`@Id`注解表示该字段是文档的ID。
4. 创建Repository
创建一个Repository接口,继承`ElasticsearchRepository`接口。例如:
```
public interface MyDocumentRepository extends ElasticsearchRepository<MyDocument, String> {
}
```
`MyDocument`表示文档类型,`String`表示文档ID的类型。
5. 使用Repository
在Service或Controller中使用`MyDocumentRepository`来操作elasticsearch。例如:
```
@Service
public class MyService {
@Autowired
private MyDocumentRepository repository;
public void save(MyDocument document) {
repository.save(document);
}
public MyDocument findById(String id) {
return repository.findById(id).orElse(null);
}
public List<MyDocument> search(String keyword) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.queryStringQuery(keyword))
.build();
return repository.search(searchQuery).getContent();
}
}
```
`save`方法用于保存文档,`findById`方法用于根据ID查找文档,`search`方法用于搜索文档。`SearchQuery`表示搜索的查询条件,这里使用`QueryStringQuery`表示关键字查询。`NativeSearchQueryBuilder`用于构建查询条件。
6. 测试
编写测试类,测试`MyService`中的方法。例如:
```
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService service;
@Test
public void testSave() {
MyDocument document = new MyDocument();
document.setId("1");
document.setName("test");
document.setContent("hello world");
service.save(document);
}
@Test
public void testFindById() {
MyDocument document = service.findById("1");
assertNotNull(document);
assertEquals("test", document.getName());
assertEquals("hello world", document.getContent());
}
@Test
public void testSearch() {
List<MyDocument> documents = service.search("hello");
assertEquals(1, documents.size());
assertEquals("1", documents.get(0).getId());
assertEquals("test", documents.get(0).getName());
assertEquals("hello world", documents.get(0).getContent());
}
}
```
先保存一个文档,然后根据ID查找文档,最后根据关键字搜索文档。
阅读全文