diff --git a/ruoyi-example/ruoyi-demo/pom.xml b/ruoyi-example/ruoyi-demo/pom.xml index d8c74b3d..978fe3f6 100644 --- a/ruoyi-example/ruoyi-demo/pom.xml +++ b/ruoyi-example/ruoyi-demo/pom.xml @@ -93,6 +93,10 @@ + + com.ruoyi + ruoyi-common-elasticsearch + diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/EsCrudController.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/EsCrudController.java new file mode 100644 index 00000000..e53481b2 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/EsCrudController.java @@ -0,0 +1,86 @@ +package com.ruoyi.demo.controller; + +import cn.easyes.core.conditions.LambdaEsQueryWrapper; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.demo.domain.Document; +import com.ruoyi.demo.esmapper.DocumentMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 搜索引擎 crud 演示案例 + * + * @author Lion Li + */ +@RestController +@RequiredArgsConstructor +public class EsCrudController { + + private final DocumentMapper documentMapper; + + /** + * 查询(指定) + * + * @param title 标题 + */ + @GetMapping("/select") + public Document select(String title) { + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.eq(Document::getTitle, title); + return documentMapper.selectOne(wrapper); + } + + /** + * 搜索(模糊) + * + * @param key 搜索关键字 + */ + @GetMapping("/search") + public List search(String key) { + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); + wrapper.like(Document::getTitle, key); + return documentMapper.selectList(wrapper); + } + + /** + * 插入 + */ + @PostMapping("/insert") + public Integer insert(@RequestBody Document document) { + return documentMapper.insert(document); + } + + /** + * 更新 + */ + @PutMapping("/update") + public R update(@RequestBody Document document) { + // 测试更新 更新有两种情况 分别演示如下: + // case1: 已知id, 根据id更新 (为了演示方便,此id是从上一步查询中复制过来的,实际业务可以自行查询) + documentMapper.updateById(document); + + // case2: id未知, 根据条件更新 +// LambdaEsUpdateWrapper wrapper = new LambdaEsUpdateWrapper<>(); +// wrapper.like(Document::getTitle, document.getTitle()); +// Document document2 = new Document(); +// document2.setTitle(document.getTitle()); +// document2.setContent(document.getContent()); +// documentMapper.update(document2, wrapper); + + return R.ok(); + } + + /** + * 删除 + * + * @param id 主键 + */ + @DeleteMapping("/delete/{id}") + public R delete(@PathVariable String id) { + // 测试删除数据 删除有两种情况:根据id删或根据条件删 + return R.ok(documentMapper.deleteById(id)); + } + +} diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/Document.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/Document.java new file mode 100644 index 00000000..417d2ca3 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/Document.java @@ -0,0 +1,25 @@ +package com.ruoyi.demo.domain; + +import lombok.Data; + +/** + * 文档实体 + */ +@Data +public class Document { + + /** + * es中的唯一id + */ + private String id; + + /** + * 文档标题 + */ + private String title; + + /** + * 文档内容 + */ + private String content; +} diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/esmapper/DocumentMapper.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/esmapper/DocumentMapper.java new file mode 100644 index 00000000..b924afb1 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/esmapper/DocumentMapper.java @@ -0,0 +1,7 @@ +package com.ruoyi.demo.esmapper; + +import cn.easyes.core.conditions.interfaces.BaseEsMapper; +import com.ruoyi.demo.domain.Document; + +public interface DocumentMapper extends BaseEsMapper { +} diff --git a/ruoyi-example/ruoyi-demo/src/main/resources/application.yml b/ruoyi-example/ruoyi-demo/src/main/resources/application.yml index 850346f2..bf3a6e04 100644 --- a/ruoyi-example/ruoyi-demo/src/main/resources/application.yml +++ b/ruoyi-example/ruoyi-demo/src/main/resources/application.yml @@ -45,3 +45,51 @@ spring: url: ${datasource.system-master.url} username: ${datasource.system-master.username} password: ${datasource.system-master.password} + +--- # elasticsearch 功能配置 +# 文档地址: https://www.easy-es.cn/ +# 更改包名需要去 EasyEsConfiguration 修改包扫描(后续版本支持配置文件读取) +easy-es: + # 是否开启EE自动配置 + enable: true + # es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开 + address : localhost:9200 + # 默认为http + schema: http + # 注意ES建议使用账号认证 不使用会报警告日志 + #如果无账号密码则可不配置此行 + #username: + #如果无账号密码则可不配置此行 + #password: + # 心跳策略时间 单位:ms + keep-alive-millis: 18000 + # 连接超时时间 单位:ms + connectTimeout: 5000 + # 通信超时时间 单位:ms + socketTimeout: 5000 + # 请求超时时间 单位:ms + requestTimeout: 5000 + # 连接请求超时时间 单位:ms + connectionRequestTimeout: 5000 + # 最大连接数 单位:个 + maxConnTotal: 100 + # 最大连接路由数 单位:个 + maxConnPerRoute: 100 + global-config: + # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能 + print-dsl: true + # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快 + asyncProcessIndexBlocking: true + db-config: + # 是否开启下划线转驼峰 默认为false + map-underscore-to-camel-case: true + # id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成 + id-type: customize + # 字段更新策略 默认为not_null + field-strategy: not_null + # 默认开启,查询若指定了size超过1w条时也会自动开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响. + enable-track-total-hits: true + # 数据刷新策略,默认为不刷新 + refresh-policy: immediate + # 是否全局开启must查询类型转换为filter查询类型 默认为false不转换 + enable-must2-filter: false