Easy es问题总结
官网教程:https://www.easy-es.cn/pages/ac41f0/#settings
一 测试项目
1 pom
<dependencies> <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <dependency> <groupId>org.dromara.easy-es</groupId> <artifactId>easy-es-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2 application.yml
# elasticsearch配置 easy-es: # 默认为true,若为false时,则认为不启用本框架 enable: true #填你的es连接地址 address: 192.168.1.247:9200
3 启动项:
添加扫描路径
@EsMapperScan("com.xxx.mapper_es")
4 domain_es
package com.xxx.domain_es; import com.helka.bo.domain.gen.entity.BoSopContent; import lombok.Data; import org.dromara.easyes.annotation.IndexField; import org.dromara.easyes.annotation.IndexId; import org.dromara.easyes.annotation.IndexName; import org.dromara.easyes.annotation.rely.Analyzer; import org.dromara.easyes.annotation.rely.FieldType; import org.dromara.easyes.annotation.rely.IdType; @Data @IndexName("bo_sop_content") public class BoSopContentES { /** * ES的id(必须,否则会抛异常) */ @IndexId(type= IdType.CUSTOMIZE) private String id; /** * sop的标题 */ @IndexField(fieldType = FieldType.TEXT, ignoreCase = true, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_SMART) private String sop_title; /** * sop的内容 */ @IndexField(fieldType = FieldType.TEXT, ignoreCase = true, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_SMART) private String sop_content; }
5 Mapper
import com.xxx.domain.gen.entity.BoSopContent; import com.xxx.domain_es.BoSopContentES; import org.dromara.easyes.core.core.BaseEsMapper; /** * @author: Tyler * @create: 2024-07-19 */ public interface BoSopContentESMapper extends BaseEsMapper<BoSopContentES> { }
6 controller
package com.xxx.controller; import com.xxx.domain_es.BoSopContentES; import com.xxx.mapper_es.BoSopContentESMapper; import lombok.RequiredArgsConstructor; import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper; import org.elasticsearch.index.query.Operator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author: Tyler * @create: 2024-07-19 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/sopContentES") public class BoSopContentESController { @Autowired BoSopContentESMapper sopMapper; /** * 查询索引下总数 * @return */ @GetMapping("/count") public Long count() { LambdaEsQueryWrapper<BoSopContentES> wrapper = new LambdaEsQueryWrapper<>(); sopMapper.selectCount(wrapper); return sopMapper.selectCount(wrapper); } @GetMapping("/search") public List<BoSopContentES> search(String req) { LambdaEsQueryWrapper<BoSopContentES> wrapper = new LambdaEsQueryWrapper<>(); //按照得分排序 wrapper.multiMatchQuery(req , Operator.OR ,50 ,BoSopContentES::getSop_title, BoSopContentES::getSop_content ) .sortByScore(); List<BoSopContentES> list1=sopMapper.selectList(wrapper); return list1; } }
二 问题与解决
1 multiMatchQuery 查询与 kibana中不一致
这是由于minimumShouldMatch参数导致,easy-es默认为60,设置为50解决。
//按照得分排序 wrapper.multiMatchQuery(req , Operator.OR ,50 ,BoSopContentES::getSop_title, BoSopContentES::getSop_content ) .sortByScore(); List<BoSopContentES> list1=sopMapper.selectList(wrapper);
2 org.dromara.easyes.common.exception.EasyEsException: no such method
es 实体创建id,es数据中无需修改
/** * ES的id(必须) */ @IndexId(type= IdType.CUSTOMIZE) private String id;