引入
目前,项目中使用常规的mysql语句实现了查询功能,比如对岗位的查询主要使用了下面的动态SQL语句:
1 | <select id="getAllJobDynamically" resultType="com.qdu.entity.Job"> |
然而,实际上有一种更加专业的方式实现搜索,那就是Elasticsearch。
Elasticsearch简介
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式的全文搜索引擎,基于restful web接口。Elasticsearch是用Java语言开发的,基于Apache协议的开源项目,是目前最受欢迎的企业搜索引擎。Elasticsearch广泛运用于云计算中,能够达到实时搜索,具有稳定,可靠,快速的特点。
在安装并运行Es服务后,可以再安装Kibana作为Es的客户端,并使用默认的端口访问客户端:
整合Elasticsearch实现搜索
1.在pom.xml
中添加相关依赖;
1 | <!--Elasticsearch相关依赖--> |
2.修改application.yml
配置文件,在spring节点下添加Elasticsearch相关配置;
1 | spring: |
3.实现岗位搜索功能
对实体类添加注解
1 | /** |
创建Repository接口,继承ElasticsearchRepository,并添加自定义查询方法:
1 | public interface JobRepository extends ElasticsearchRepository<Job, String> { |
搜索功能异常问题
在实现简单的搜索后,测试功能发现问题。
例如,搜索名称为“后端”的岗位,并不能查询到名称为“Java后端开发”的岗位。而只能通过精准查询岗位名称实现。这种查询效果不太能让人满意。
查阅资料发现,对于汉字,在Elasticsearch中,如果未安装支持中文分词的插件(如ik分词器),或者虽然安装了但没有正确配置使用,当索引和搜索时就可能出现词汇粒度不一致的情况。
后续通过安装插件,解决了这个问题。