请确保已有可用的ES,若没有,请移步:Docker安装部署ElasticSearch(ES)
这里是用的springboot版本是2.6.0
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-high-level-clientartifactId>
exclusion>
<exclusion>
<groupId>org.elasticsearchgroupId>
<artifactId>elasticsearchartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-high-level-clientartifactId>
<version>7.14.0version>
dependency>
<dependency>
<groupId>org.elasticsearchgroupId>
<artifactId>elasticsearchartifactId>
<version>7.14.0version>
dependency>
<dependency>
<groupId>cn.easy-esgroupId>
<artifactId>easy-es-boot-starterartifactId>
<version>2.0.0-beta1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
注意修改address信息,该为自己的ES地址
easy-es:
enable: true
address : ES地址:9200
global-config:
process_index_mode: manual
listener部分我们先不用管
添加扫描ESMapper的注解,指定路径
@EsMapperScan("com.mine.easyEs.mapper")
@Data
public class Document {
@Id
/**
* es中的唯一id
*/
private String id;
/**
* 文档标题
*/
private String title;
/**
* 文档内容
*/
private String content;
/**
* 创建时间
*/
private Date createTime;
}
包括对索引操作和对数据进行操作的接口
@RestController
@RequestMapping("/ee")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DocumentController {
private final IDocumentService documentService;
/**
* 创建索引
* @return 结果信息
* @throws Exception
*/
@GetMapping("/createIndex")
public String createIndex() throws Exception {
return documentService.createIndex();
}
/**
* 删除索引
* @return 结果信息
*/
@GetMapping("/deleteIndex")
public String deleteIndex(){
return documentService.deleteIndex();
}
/**
* 查询ES所有数据
* @return 查询Document结果对象集合
*/
@GetMapping("/findAll")
public List<Document> findAll(){
return documentService.findAllData();
}
/**
* ES新增数据
* @param document 新增数据对象
* @return 结果信息
* @throws Exception
*/
@GetMapping("/add")
public String addData(Document document) throws Exception {
return documentService.addData(document);
}
/**
* 修改ES数据
* @param document 修改数据对象
*/
@GetMapping("/update")
public String updateData(Document document){
return documentService.updateData(document);
}
/**
* 根据id删除ES数据
* @param id 需要删除的数据的id
* @return
*/
@GetMapping("/delete")
public String deleteData(String id){
return documentService.deleteDataById(id);
}
/**
* 分词匹配查询content字段
* @param value 查询内容
* @return
*/
@GetMapping("/match")
public List<Document> findMatch(String value){
return documentService.findMatch(value);
}
}
继承BaseMapper,整体操作都与MybatisPlus类似
public interface DocumentMapper extends BaseEsMapper<Document> {
}
public interface IDocumentService {
/**
* 查询ES所有数据
* @return 查询Document结果对象集合
*/
List<Document> findAllData();
/**
* 创建索引
* @return 结果信息
* @throws Exception
*/
String createIndex() throws Exception;
/**
* 删除索引
* @return 结果信息
*/
String deleteIndex();
/**
* ES新增数据
* @param document 新增数据实体类
* @return 结果信息
* @throws Exception
*/
String addData(Document document) throws Exception;
/**
* 根据id删除ES数据
* @param id 需要删除的数据的id
* @return
*/
String deleteDataById(String id);
/**
* 修改ES数据
* @param document 修改数据对象
*/
String updateData(Document document);
/**
* 分词匹配查询content字段
* @param value 查询内容
* @return
*/
List<Document> findMatch(String value);
}
Service实现类
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DocumentServiceImpl implements IDocumentService {
private final DocumentMapper documentMapper;
/**
* 查询ES所有数据
* @return 查询Document结果对象集合
*/
@Override
public List<Document> findAllData() {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.matchAllQuery();
return documentMapper.selectList(wrapper);
}
/**
* 创建索引
* @return 结果信息
* @throws Exception
*/
@Override
public String createIndex() throws Exception {
StringBuilder msg = new StringBuilder();
String indexName = Document.class.getSimpleName().toLowerCase();
boolean existsIndex = documentMapper.existsIndex(indexName);
if (existsIndex){
throw new Exception("Document实体对应索引已存在,删除索引接口:deleteIndex");
}
boolean success = documentMapper.createIndex();
if (success){
msg.append("Document索引创建成功");
}else {
msg.append("索引创建失败");
}
return msg.toString();
}
/**
* 删除索引
* @return 结果信息
*/
@Override
public String deleteIndex() {
StringBuilder msg = new StringBuilder();
String indexName = Document.class.getSimpleName().toLowerCase();
if (documentMapper.deleteIndex(indexName)){
msg.append("删除成功");
}else {
msg.append("删除失败");
}
return msg.toString();
}
/**
* ES新增数据
* @param document 新增数据实体类
* @return 结果信息
* @throws Exception
*/
@Override
public String addData(Document document) throws Exception {
if (StringUtils.isEmpty(document.getTitle()) || StringUtils.isEmpty(document.getContent())) {
throw new Exception("请补全title及content数据");
}
document.setCreateTime(new Date());
documentMapper.insert(document);
return "Added successfully!";
}
/**
* 根据id删除ES数据
* @param id 需要删除的数据的id
* @return
*/
@Override
public String deleteDataById(String id) {
documentMapper.deleteById(id);
return "Success";
}
/**
* 修改ES数据
* @param document 修改数据对象
*/
@Override
public String updateData(Document document) {
documentMapper.updateById(document);
return "Success";
}
/**
* 分词匹配查询content字段
* @param value 查询内容
* @return
*/
@Override
public List<Document> findMatch(String value) {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.match(Document::getContent,value);
wrapper.orderByDesc(Document::getCreateTime);
List<Document> documents = documentMapper.selectList(wrapper);
return documents;
}
}
使用PostMan测试
测试完成