课程计划
1 | 1、Solr服务搭建 |
Solr服务搭建
Solr的环境
1 | Solr是java开发。 |
搭建步骤
- 把solr 的压缩包上传到Linux系统
- 解压solr。
- 安装Tomcat,解压缩即可。
- 把solr部署到Tomcat下。
- 解压缩war包。启动Tomcat解压。
- 把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包,添加到solr工程中。
- 创建一个solrhome。/example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome
- 关联solr及solrhome。需要修改solr工程的web.xml文件。
- 启动Tomcat
这里有个坑,你把zookeeper最好启动,因为这个里面有我之前部署的zookeeper的监控中心,就那个dubbo-admin,所以先把zookeeper开启,就不会报错了
访问solr服务
访问之前的dubbo-admin
配置业务域
schema.xml中定义
1 | 1、商品Id |
创建对应的业务域。需要制定中文分析器。
创建步骤:
- 把中文分析器添加到工程中。
①.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下
②.把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。
- 配置一个FieldType,制定使用IKAnalyzer
①.修改schema.xml文件
②.修改Solr的schema.xml文件,添加FieldType:
- 配置业务域,type制定使用自定义的FieldType。
设置业务系统Field
1 | <field name="item_title" type="text_ik" indexed="true" stored="true"/> |
- 重启tomcat
搜索工程搭建
要实现搜索功能,需要搭建solr服务、搜索服务工程、搜索系统
搜索服务工程搭建
1 | 可以参考e3-manager创建。 |
使用solrJ管理索引库
使用SolrJ可以实现索引库的增删改查操作。
添加文档
第一步:把solrJ的jar包添加到工程中。
第二步:创建一个SolrServer,使用HttpSolrServer创建对象。
第三步:创建一个文档对象SolrInputDocument对象。
第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。
第五步:把文档添加到索引库中。
第六步:提交。
1 | /** |
删除文档
根据id删除
第一步:创建一个SolrServer对象。
第二步:调用SolrServer对象的根据id删除的方法。
第三步:提交。
1 | /** |
根据查询删除
1 | /** |
把商品数据导入到索引库中
Dao层
Sql语句
1 | select |
需要自己创建Mapper文件。
1 | <?xml version="1.0" encoding="UTF-8" ?> |
创建对应数据集的pojo
1 | public class SearchItem implements Serializable{ |
接口定义
1 | public interface ItemMapper { |
Mapper映射文件
1 | <?xml version="1.0" encoding="UTF-8" ?> |
Service层
功能分析
1 | 1、查询所有商品数据。 |
solrJ添加索引库
1 | 1、把solrJ的jar包添加到工程。 |
代码实现
1 | /** |
此时我们的spring容器中还没有SolrServer对象,所以得配置一个
SolrServer的配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
发布服务
表现层
后台管理工程中调用商品导入服务。
功能分析
请求的url:/index/item/import
响应的结果:json数据。可以使用E3Result
Controller
1 | /** |
解决Mapper映射文件不存在异常
在e3-search-service的pom文件中需要添加资源配置
1 | <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 --> |
成功导入!!!!
六.搜索功能实现
6.1 搭建前台搜索工程
使用sorlJ 查询索引库
1 | @Test |
代码高亮显示
1 | @Test |
功能分析
1 | 把搜索结果页面添加到工程中。 |
1 | public class SearchResult implements Serializable { |
Dao层
1 | /** |
Service层
1 | 需要有一个接口一个实现类,需要对外发布服务。 |
1 | /** |
发布服务
表现层
引用服务
Controller
1 | /** |