简述
本文中,将配置solr
来提供搜索服务,并修改iarc-data
来使用solr。
源代码
环境
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
2SOLR_HOST="192.168.56.103"
SOLR_TIMEZONE="UTC+8"
启动/停止 别名
1 | alias solrstart='/opt/solr/bin/solr start -cloud -p 8983 -s "/opt/solr/server/solr" -z localhost:2181 -force' |
配置目录
1 | $ mkdir /opt/solr/conf |
上传/更新配置
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 | $ cp /opt/solr/dist/solr-dataimporthandler-* /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 | spring.data.solr.host=http://192.168.56.103:8983/solr |
pom.xml
1 | <dependency> |
solrdocument
1 | @SolrDocument(solrCoreName = "user") |
repository
1 | public interface SolrUserRepository extends SolrCrudRepository<SolrUser, String> { |
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功能
- 使用mvn清理并构建:
mvn clean install -Dmaven.test.skip=true
- IDE中启动data与service
- 访问地址: http://localhost:8001/user/getUsersByName/v
部署
部署到linux下tomcat中
参考数据访问层中部署
部分
参考
- centos+solr7.3
- solrcloud simple
1
2 - Solr Reference Guide
resource
7.3 script
solr 7.3 using zookeeper - sprintboot using solr
simple
官方