简述
本文中,将配置solr来提供搜索服务,并修改iarc-data来使用solr。
源代码
iarc-data
环境
IDE: IntelliJ IDEA
JDK: 1.8.0_u162
MiddleWare: Solr 7.3.0
App Coordinator: Zookeeper 3.4.10
DB: MySQL
开发
安装solr
从官网下载并复制到centos下/opt目录
1 2 3
| $ cd /opt $ tar -zxvf solr-7.3.0.tgz $ ln -s /opt/solr-7.3.0 /opt/solr
|
集群配置
$ vim /opt/solr/bin/solr.in.sh, 找到如下配置节并修改
1 2
| SOLR_HOST="192.168.56.103" SOLR_TIMEZONE="UTC+8"
|
启动/停止 别名
1 2
| alias solrstart='/opt/solr/bin/solr start -cloud -p 8983 -s "/opt/solr/server/solr" -z localhost:2181 -force' alias solrstop='/opt/solr/bin/solr stop'
|
配置目录
1 2
| $ mkdir /opt/solr/conf $ cp /opt/solr/server/solr/configsets/_default/conf /opt/solr/conf/user -r
|
上传/更新配置
1
| $ /opt/solr/bin/solr zk -upconfig -z localhost:2181 -d /opt/solr/conf/user -n user
|
删除configset(非必须)
1
| http://192.168.56.103:8983/solr/admin/configs?action=DELETE&name=user
|
基于配置,创建Collection
地址:http://192.168.56.103:8983/solr/#/~collections
操作:add collection
选择:config set - user, 其余为默认
中文分词
复制需要的jar包至webapp
1
| cp /opt/solr-7.3.0/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-7.3.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/
|
修改并更新配置
vim /opt/solr/conf/user/managed-schema, 添加内容如下
1 2 3 4 5 6 7 8
| <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> </fieldType>
|
数据导入
复制需要的jar包至webapp
1 2
| $ cp /opt/solr/dist/solr-dataimporthandler-* /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ $ cp /opt/mycat/lib/mysql-connector-java-5.1.35.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/
|
修改并更新配置
$ vim /opt/solr/conf/user/solrconfig.xml, 添加内容如下
1 2 3 4 5
| <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> </requestHandler>
|
$ vim /opt/solr/conf/user/db-data-config.xml, 内容如下
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource name="ijava" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.56.103:3306/ijava" user="root" password="**" /> <document> <entity name="user" dataSource="ijava" query="select id, name from ijava.user;"> </entity> </document> </dataConfig>
|
$ vim /opt/solr/conf/user/managed-schema, 内容如下
1 2 3 4
| <schema name="user" version="1.6"> <uniqueKey>id</uniqueKey> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="name" type="text_cn" indexed="true" stored="true" required="true" multiValued="false" />
|
手动导入
地址:http://172.16.0.239:8101/solr/index.html#/user/dataimport//dataimport
选择:full-import - commit , clik Execute
注意:如果点击’Dataimport’仍然提示
“The solrconfig.xml file for this index does not have an operational DataImportHandler defined!”, 可以直接使用 api来导入
1
| http://192.168.56.103:8983/solr/user/dataimport?command=full-import&verbose=false&clean=false&commit=true&optimize=false&core=user&indent=on&wt=json
|
定时导入
crontab -e, 添加内容如下
1
| */5 * * * * curl "http://192.168.56.103:8983/solr/user/dataimport?command=full-import&verbose=false&clean=false&commit=true&optimize=false&core=user&indent=on&wt=json" > /dev/null 2>&1
|
spring boot使用solr
application.properties
1 2
| spring.data.solr.host=http://192.168.56.103:8983/solr spring.data.solr.repositories.enabled=true
|
pom.xml
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> <version>1.5.0.RELEASE</version> </dependency>
|
solrdocument
1 2 3 4 5 6 7 8
| @SolrDocument(solrCoreName = "user") @Getter @Setter public class SolrUser implements Serializable { @Id private String id; private String name; }
|
repository
1 2 3
| public interface SolrUserRepository extends SolrCrudRepository<SolrUser, String> { List<SolrUser> findByNameContaining(String name); }
|
UserServiceImpl
接口中添加方法getUsersByName
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Override public List<User> getUsersByName(String name) { List<SolrUser> users = userRepository.findByNameContaining(name); List<User> results = new ArrayList<>(); if(users != null) { users.forEach( user -> { User usr = new User(); usr.setId(Integer.parseInt(user.getId())); usr.setName(user.getName()); results.add(usr); }); } return results; }
|
调试
测试solr colletion的search功能
地址:http://192.168.56.103:8983/solr/#/user/query
位置:Query, q输入框中输入name:*v*, 点击Execute Query
测试使用solr后的service功能
部署
部署到linux下tomcat中
参考数据访问层中部署部分
参考