Springboot集成solr
Posted woodwhale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot集成solr相关的知识,希望对你有一定的参考价值。
【Springboot】集成solr
正在写一个博客系统,需要使用到关键词搜索,准备使用开源的solr
1、拉取docker镜像
因为是使用vps搭建的环境,直接在vps上拉取一个最新的solr的docker镜像
2、配置docker-compose.yml
直接配置,配置文件如下
version: '2.1'
services:
solr:
image: solr
restart: always
container_name: blog_system_solr
ports:
- 8983:8983
使用命令
sudo docker-compose up -d
成功挂起
3、创建solr核心
使用docker的exec命令创建solr核心
sudo docker exec -it blog_system_solr bin/solr create_core -c Ik_core
成功如下:
4、使用浏览器进行访问
docker中映射的solr端口号为8983,我们使用浏览器直接访问
需要注意,我这里使用的是tx的vps,需要开启防火墙
带上端口号进行访问
选择刚刚创建的核心lk_core
5、上传jar包进行配置
将所需的jar包上传到vps上
上传成功
将jar包复制到docker容器内
sudo docker cp ik-analyzer-8.3.0.jar blog_system_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp ik-analyzer-solr7-7.x.jar blog_system_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp solr-dataimporthandler-8.4.0.jar blog_system_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp solr-dataimporthandler-extras-8.4.0.jar blog_system_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
复制成功:
至于具体的solr什么版本,可以使用如下命令进入solr容器中查看
sudo docker exec -it blog_system_solr /bin/bash
我这里使用的是目前最新版本8.11.1
,修复了log4j
的洞
6、修改xml配置文件
进入solr容器进行文件夹的创建
sudo docker exec -it --user=root blog_system_solr /bin/bash
cd /opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF
mkdir classes
exit
在vps中创建xml文件IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
进入容器
sudo docker exec -it --user=root blog_system_solr /bin/bash
修改配置
cp /opt/solr-8.11.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.11.1.jar /opt/solr-8.11.1/se
rver/solr-webapp/webapp/WEB-INF/lib/
cd /var/solr/data/Ik_core/conf/
vim managed-schema
需要注意,solr容器没有自带vim,需要使用apt下载
sudo apt update
sudo apt install vim
修改managed-schema
文件,在最后面加入如下
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<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>
修改solrconfig.xml
文件
在最后面添加如下:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
最后,退出容器,在vps中进行重启
sudo docker restart blog-solr
7、进入后台查看是否成功
进入solr后台,如果出现text_cn
说明中文分词器配置成功
进行一下中文分词器测试
8、在Springboot项目中集成solr
配置pom.xml
文件,添加solr依赖,这里使用目前最新的2.4.13
版本
<!--spring solr 搜索模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
<version>2.4.13</version>
</dependency>
在application.yml中配置solr地址
spring:
data:
solr:
host: http://solr运行的ip地址:8983/solr/Ik_core
创建一个solr测试服务层
@Service
public class SolrTestService
@Autowired
private SolrClient solrClient;
public void add()
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id","954823261479239680");
doc.addField("blog_title","Java入门基础");
doc.addField("blog_view_count",10);
doc.addField("blog_content", "Java入门基础");
doc.addField("blog_create_time", new Date());
doc.addField("blog_create_timme", new Date());
doc.addField("blog_labels", "JavaEE,jvm,后端,Java开发");
doc.addField("blog_url", "https://www.woodwhale.top");
doc.addField("blog_category_id","952606168922980352");
try
solrClient.add(doc);
solrClient.commit();
catch (Exception e)
e.printStackTrace();
测试接口调用
@PostMapping("/solr")
public ResponseResult solrAddTest()
solrTestService.add();
return ResponseResult.SUCCESS("添加成功");
spring后台没保存,查看solr后台,进行查询,发现添加成功
同理,更新只要ID一样,就可以进行内容更新,删除只要ID一样,就会删除该数据
以上是关于Springboot集成solr的主要内容,如果未能解决你的问题,请参考以下文章
solr 7+tomcat 8 + mysql实现solr 7基本使用(安装集成中文分词器定时同步数据库数据以及项目集成)