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基本使用(安装集成中文分词器定时同步数据库数据以及项目集成)

solr : springboot 整合 solr

springboot整合solr

08 springboot整合solr

solr搜索之demo和集成IKAnalyzer

如何使用Hive集成Solr?