本文介绍基于Docker部署Solr,并基于SpringBoot进行开发。
1. 源码
地址:https://github.com/tyrival/SpringBoot-Dubbo-Sample
2. Solr
2.1 准备
- 下载工程solr-7.4.0.zip(不带src的),解压缩。下载地址:http://lucene.apache.org/solr/
- 创建目录
~/Documents/Workspace/Docker/Solr
,用来存储solr的所有cores - 将工程
solr-7.4.0/server/solr
下所有文件,复制到刚创建的~/Documents/Workspace/Docker/Solr
中
1 | # 下载镜像solr:7.4.0,此版本需要和之前下载的工程版本保持一致 |
2.2 容器部署
1 | # --name 命名容器名称 |
2.3 创建core
1 | # 在name=solr的容器中,创建core=tyrival |
2.4 配置
- 下载postgres的驱动,此处用postgresql-42.2.2.jar,复制到
~/Documents/Workspace/Docker/Solr/lib
中 - 将工程
solr-7.4.0/example/example-DIH/solr/db/conf/db-data-config.xml
,复制到~/Documents/Workspace/Docker/Solr/conf
中,并编辑此文件
1 | <dataConfig> |
- 在数据库建表
1 | create table country |
- 编辑
~/Documents/Workspace/Docker/Solr/conf/solrconfig.xml
,设置DataImportHandler
1 | <!-- 如果出现问题,就尝试把/dataimport写在/select之前 --> |
- 重启Solr
1 | $ docker container stop [solr container id] |
- 浏览器打开
http://localhost:8983/solr
,进入Solr Admin,左侧菜单Core Selector选择tyrival,然后选择Schema功能 - 点击右侧页面左上方的Add Field按钮,添加country表的name列
1 | name: name |
同样的方法添加name_en和continent列,然后可以在~/Documents/Workspace/Docker/Solr/conf/managed_schema
中看到如下内容:
1 | <field name="continent" type="string" indexed="true" stored="true"/> |
- 此处如果主键名不是id,需要进行以下修改
1 | <!-- 将id修改为主键名 --> |
- 重启Solr
- 刷新Solr Admin页面,左侧选择core=tyrival,选DataImport菜单,进入数据导入页面
- 在数据导入页选全部导入Command=full-import,选择Entity=country,点击Execute,刷新页面,直到右侧出现绿色提示后,表示导入成功
1 | Indexing completed. Added/Updated: 5 documents. Deleted 0 documents. |
- 点击左侧菜单Query,进入查询页面,输入q=name_en:republic,点击Execute Query进行查询,可以查到相应的记录。
1 | { |
2.5 开发
当solr部署完成后,可以进行二次开发,实现远程调用Solr应用,实现业务功能和solr引擎解耦,开发过程和user模块相似。
2.5.1 新建模块
新建solr模块,并在根pom.xml中增加solr模块
1 | <modules> |
2.5.2 pom.xml
参考user模块的pom.xml修改,继承根pom.xml,并引入spring-boot-starter-data-solr
1 | <dependencies> |
2.5.3 application.properties
配置文件中增加solr应用的访问地址,最后加上core名称tyrival,工程中实际配置在开发环境配置文件application-dev.properties
中
1 | ## solr 服务器 |
2.5.4 Country.java
在common模块中创建实体时,必须加注解
- 类加@SolrDocument注解,solrCoreName的值为core名称,即tyrival
- 属性加@Field注解,如果表字段名与属性名不同,在@Field内标注表名
- 主键属性加@Id注解
1 | package com.tyrival.entity.country; |
2.5.5 CountryServiceImpl.java
- 记得类要加@com.alibaba.dubbo.config.annotation.Service和@org.springframework.stereotype.Service注解
- SolrClient会被框架自动示例化注入
1 |
|