【Spring】集成solr

【Spring】集成solr

前言

正在写一个博客系统,需要使用到关键词搜索,准备使用开源的solr

(本来这篇文章是由图片的,但是由于gitee的图床被官方制裁了,导致我上传的图片都无了,所以就草草发布吧。。。)

2022/4/9更新图片,原因是换了一个vps部署了solr,使用docker打了tar包导入无法使用原来的核心,便重新导入了一次…

1、拉取docker镜像

因为是使用vps搭建的环境,直接在vps上拉取一个最新的solr的docker镜像

2、配置docker-compose.yml

直接配置,配置文件如下

version: '2.1'
services:
  solr:
    image: solr
    restart: always
    container_name: wbs_solr
    ports:
      - 8983:8983

使用命令

sudo docker-compose up -d

成功挂起

3、创建solr核心

使用docker的exec命令创建solr核心

sudo docker exec -it wbs_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 wbs_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp  ik-analyzer-solr7-7.x.jar wbs_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp  solr-dataimporthandler-8.4.0.jar wbs_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/
sudo docker cp solr-dataimporthandler-extras-8.4.0.jar  wbs_solr:/opt/solr-8.11.1/server/solr-webapp/webapp/WEB-INF/lib/

复制成功:
在这里插入图片描述

至于具体的solr什么版本,可以使用如下命令进入solr容器中查看

sudo docker exec -it wbs_solr /bin/bash

我这里使用的是目前最新版本8.11.1,修复了log4j的洞

6、修改xml配置文件

进入solr容器进行文件夹的创建

sudo docker exec -it --user=root wbs_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 wbs_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/server/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 wbs_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一样,就会删除该数据

猜你喜欢

转载自blog.csdn.net/woodwhale/article/details/123754636
今日推荐