前言
上篇文章主要描述了ES的安装和ES可视化管理工具kibana,本篇内容主要描述SpringBoot整合ES实现增删改查操作。
SpringBoot 在2.0之前对ES支持不友好,只能通过EsTemplate操作ES。本文使用的是SpringBoot 2.4.2版本,对es操作如下:
1.实现CrudRepository、ElasticsearchRepository接口
2.ElasticsearchRestTemplate
3.ElasticsearchOperations。
本篇文章主要通过CrudRepository来实现,类似JPA。
整合
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>elasticsearch</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- ES -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring boot 单元测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
application.yml
spring:
elasticsearch:
rest:
uris: 192.168.126.156:9200
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* ES 搜索
* @author terry
* @version 1.0
* @date 2022/6/6 10:32
*/
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class);
}
}
实体映射类,indexName对应ES的索引,indexStoreType对应ES中的类型
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "terry", indexStoreType = "goods")
@Data
public class Goods {
@Id
private String id;
private String name;
private int money;
}
编写接口GoodsDao.java,什么都不干就实现CrudRepository接口。
import com.terry.entry.Goods;
import org.springframework.data.repository.CrudRepository;
/**
* ES 测试
* @author terry
* @version 1.0
* @date 2022/6/6 10:57
*/
public interface GoodsDao extends CrudRepository<Goods, String> {
}
测试类
import com.terry.App;
import com.terry.dao.GoodsDao;
import com.terry.entry.Goods;
import lombok.extern.java.Log;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = App.class)
@Log
public class TestEs {
@Autowired
private GoodsDao goodsDao;
/**
* 新增文档
*/
@Test
public void add(){
Goods goods = new Goods();
goods.setName("小米");
goods.setMoney(3000);
Goods result = goodsDao.save(goods);
log.info("测试新增数据:" + String.valueOf(result));
}
/**
* 查询文档
*/
@Test
public void query(){
Optional<Goods> optional = goodsDao.findById("hT78NoEBC22E9ieBnzvo");
log.info("测试查询数据:" + String.valueOf(optional.get()));
}
/**
* 删除文档
*/
@Test
public void delete(){
// 删除
goodsDao.deleteById("hT78NoEBC22E9ieBnzvo");
// 查询
Optional<Goods> optional = goodsDao.findById("hT78NoEBC22E9ieBnzvo");
log.info("删除之后再查询:" + String.valueOf(optional.get()));
}
}
新增文档打印输出:
测试新增数据:Goods(id=hT78NoEBC22E9ieBnzvo, name=小米, money=3000)
查询文档打印输出:
测试查询数据:Goods(id=hT78NoEBC22E9ieBnzvo, name=小米, money=3000)
删除之后再查询:
java.util.NoSuchElementException: No value present