SpringBoot集成Solr(一)保存数据到Solr

news2024/10/7 0:26:53

SpringBoot集成Solr(一)保存数据到Solr

  • 添加依赖

    <!--SpringBoot中封装过的Solr依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-solr</artifactId>
        <version>2.4.10</version>
    </dependency>
    
    <!--实体映射注解@Field-->
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>8.9.0</version>
    </dependency>
    
    • 若使用了上面data-solr的依赖,则在使用@Field注解时需要额外引入下面solr-solrj依赖
    • 但是若直接引用solr-solrj依赖则可以不引用上面data-solr依赖.。
  • 添加配置文件

    • 方式一:使用spring内置data-solr的配置方式
    spring:
      data:
        solr:
          host: http://localhost:8983/solr/new_core
    
    • 若配置文件使用上面方式指定Solr地址,则可以通过下面代码配置solrClient

      @Configuration
      @EnableConfigurationProperties(SolrProperties.class)
      public class SolrConfig {
          @Bean
      	public SolrClient solrClient(SolrProperties properties) {
      		return new HttpSolrClient.Builder(properties.getHost()).withConnectionTimeout(3000).withSocketTimeout(3000).build();
      	}
      
      }
      
    • 注意:

      使用这种方式必须要有@EnableConfigurationProperties(SolrProperties.class)作用是读取yml文件中配置的solr地址。

    • 方式二:自定义方式配置

    solr:
      #搜索引擎服务器地址
      url: http://192.168.100.34:8983/solr/new_core
      #连接搜索引擎服务器超时时间(毫秒)
      connectionTimeout: 5000
    
    • 配置solrClient

      @Configuration
      public class SolrConfig {
          /**
           * 搜索引擎服务器地址
           */
          @Value("${solr.url}")
          private String url;
          
          /**
      	 * 连接搜索引擎服务器超时时间(毫秒)
      	 */
      	@Value("${solr.connectionTimeout}")
      	private int connectionTimeout;
          
          @Bean
      	public SolrClient solrClient() {
      		return new HttpSolrClient.Builder(url).withConnectionTimeout(connectionTimeout).withSocketTimeout(connectionTimeout).build();
      	}
      
  • 使用示例:

    • 创建用于映射solr中字段的实体::
    @Data
    public class KnowledgeIk implements Serializable {
        
    	private static final long serialVersionUID = 7552668827510919451L;
    
    	@Field
    	private String id;
        /**
    	 * 作者
    	 */
    	@Field
    	private String creationBy_s;
        /**
    	 * 摘要
    	 */
    	@Field
    	private String summary_ik;
    
    	/**
    	 * 内容
    	 */
    	@Field
    	private String content_ik;
    }
    
    • 将实体KnowledgeIk保存到Solr
    @Service
    public class KmKnowledgeServiceImpl implements IKmKnowledgeService {
        /**
    	 * solr服务
    	 */
    	@Resource
    	private SolrClient solrClient;
        
        @Override
    	public R saveKnowledge(KmKnowledge km) {
            List<KnowledgeIk> docs = new ArrayList<KnowledgeIk>();
    		KnowledgeIk knowledgeIk = new KnowledgeIk();
             knowledgeIk.setId(Func.toStr(km.getId()));
             knowledgeIk.setCreationBy_s(km.getCreationby());
             knowledgeIk.setSummary_ik(km.getSummary());
             knowledgeIk.setContent_ik(km.getContent());
    	    docs.add(knowledgeIk);
            
            try {
    			//添加或更新多个文档
    			UpdateResponse addBeans = solrClient.addBeans(docs);
    			solrClient.optimize();
    			solrClient.commit();
    		} catch (Exception e) {
    			log.error("Save knowledge to solr error.", e);
    		}
           
        }
        
    }
    
    • Controller层:
    @Resource
    private IKmKnowledgeService kmKnowledgeService;
    
    @PostMapping("/save")	
    public R save(@Valid @RequestBody KmKnowledge kmKnowledge) {
    		return kmKnowledgeService.saveKnowledge(kmKnowledge);
    }
    
    • 测试结果:

    在这里插入图片描述

    • 注意:这里只列出了部分字段属性和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程信号篇:信号的产生(signal、kill、raise、abort、alarm)、信号的保存(core dump)

文章目录 一、 signal 函数&#xff1a;用户自定义捕捉信号二、信号的产生1. 通过中断按键产生信号2. 调用系统函数向进程发信号2.1 kill 函数&#xff1a;给任意进程发送任意信号2.2 raise 函数&#xff1a;给调用进程发送任意信号2.3 abort 函数&#xff1a;给调用进程发送 6…

Rest学习环境搭建:服务提供者

创建一个普通的Maven项目 pom.xml父工程 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

科大讯飞发布星火认知大模型2.0版——体验实测

8月15日&#xff0c;科大讯飞举行讯飞星火认知大模型V2.0升级发布会&#xff0c;对外展示其升级后的大模型代码能力和多模态能力&#xff0c;同时发布并升级搭载讯飞星火认知大模型V2.0能力的多项应用和产品。自5月6日首发以来&#xff0c;星火认知大模型经历V1.5版本的迭代&am…

面试之快速学习STL-deuqe和list

1. deque deque 容器用数组&#xff08;数组名假设为 map&#xff09;存储着各个连续空间的首地址。也就是说&#xff0c;map 数组中存储的都是指针如果 map 数组满了怎么办&#xff1f;很简单&#xff0c;再申请一块更大的连续空间供 map 数组使用&#xff0c;将原有数据&…

利用Figlet工具创建酷炫Linux Centos8服务器-登录欢迎界面-SHELL自动化编译安装代码

因为我们需要生成需要的特定字符,所以需要在当前服务器中安装Figlet,默认没有安装包的,其实如果我们也只要在一台环境中安装,然后需要什么字符只要复制到需要的服务器中,并不需要所有都安装。同样的,我们也可以利用此生成的字符用到脚本运行的开始起头部分,用ECHO分行标…

go_并发编程(1)

go并发编程 一、 并发介绍1&#xff0c;进程和线程2&#xff0c;并发和并行3&#xff0c;协程和线程4&#xff0c;goroutine 二、 Goroutine1&#xff0c;使用goroutine1&#xff09;启动单个goroutine2&#xff09;启动多个goroutine 2&#xff0c;goroutine与线程3&#xff0…

log4j:WARN No appenders could be found for logger问题

本文将idea场景下的使用。 IDEA中&#xff0c;将配置文件命名为log4j.properties&#xff08;该命名才会被自动加载&#xff09;&#xff0c; 并放到某个目录下&#xff08;通常放到resources目录&#xff09;&#xff0c;并在resources上右键&#xff0c;找到Mark Directory a…

(二)结构型模式:8、代理模式(Proxy Pattern)(C++示例)

目录 1、代理模式&#xff08;Proxy Pattern&#xff09;含义 2、代理模式的UML图学习 3、代理模式的应用场景 4、代理模式的优缺点 5、C实现代理模式的实例 1、代理模式&#xff08;Proxy Pattern&#xff09;含义 代理模式&#xff08;Proxy&#xff09;&#xff0c;为…

【LangChain】P1 LangChain 应用程序的核心构建模块 LLMChain 以及其三大部分

LangChain 的核心构建模块 LLMChain LangChain 应用程序的核心构建模块语言模型 - LLMs提示模板 - Prompt templates输出解析器 - Output Parsers LLMChain 组合 LangChain 应用程序的核心构建模块 LangChain 应用程序的核心构建模块 LLMChain 由三部分组成&#xff1a; 语言…

【Git】(四)子模块

1、增加子模块 进入准备添加子模块所在的目录&#xff0c;例如library。 git submodule add -b 1.0.0.0 gitgitee.com:sunriver2000/SubModule.git参数-b用于指定子模块分支。 2、更新子模块 git submodule update --progress --init --recursive --force --remote -- "…

小程序前台Boot后台校园卡资金管理系统java web学校进销存食堂挂失jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 小程序前台Boot后台校园卡资金管理系统 系统有2权限&…

fastadmin 下拉多级分类

要实现下图效果 一、先创建数据表 二、在目标的controll中引入use fast\Tree; public function _initialize() {parent::_initialize();$this->model new \app\admin\model\zxdc\Categorys;$tree Tree::instance();$tree->init(collection($this->model->order(…

Springboot写单元测试

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintag…

探索高级UI、源码解析与性能优化,了解开源框架及Flutter,助力Java和Kotlin筑基,揭秘NDK的魅力!

课程链接&#xff1a; 链接: https://pan.baidu.com/s/13cR0Ip6lzgFoz0rcmgYGZA?pwdy7hp 提取码: y7hp 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍&#xff1a; &#x1f4da;【01】Java筑基&#xff1a;全方位指…

【Go】Go 文本匹配 - 正则表达式

正则表达式&#xff08;Regular Expression, 缩写常用regex, regexp表示&#xff09;是计算机科学中的一个概念&#xff0c;很多高级语言都支持正则表达式。 目录 何为正则表达式 语法规则 普通字符 字符转义 何为正则表达式 正则表达式是根据一定规则构建而出的规则&…

【广州华锐视点】帆船航行VR模拟实操系统

帆船航行VR模拟实操系统由广州华锐视点开发&#xff0c;是一种创新的教学工具&#xff0c;它利用虚拟现实技术&#xff0c;为学生提供了一个沉浸式的学习环境。通过这种系统&#xff0c;学生可以在虚拟的环境中进行帆船航行的实训&#xff0c;从而更好地理解和掌握帆船航行的技…

腾讯云3年轻量应用服务器2核4G5M和2核2G4M详细介绍

腾讯云轻量应用服务器3年配置&#xff0c;目前可以选择三年的轻量配置为2核2G4M和2核4G5M&#xff0c;2核2G4M和2核4G5M带宽&#xff0c;当然也可以选择选一年&#xff0c;第二年xufei会比较gui&#xff0c;腾讯云百科分享腾讯云轻量应用服务器3年配置表&#xff1a; 目录 腾…

云原生 envoy xDS 动态配置 java控制平面开发 支持restful grpc

envoy xDS 动态配置 java控制平面开发 支持restful grpc 大纲 基础概念Envoy 动态配置API配置方式动静结合的配置方式纯动态配置方式实战 基础概念 Envoy 的强大功能之一是支持动态配置&#xff0c;当使用动态配置时&#xff0c;我们不需要重新启动 Envoy 进程就可以生效。…

数据结构的图存储结构

目录 数据结构的图存储结构 图存储结构基本常识 弧头和弧尾 入度和出度 (V1,V2) 和 的区别,v2> 集合 VR 的含义 路径和回路 权和网的含义 图存储结构的分类 什么是连通图&#xff0c;&#xff08;强&#xff09;连通图详解 强连通图 什么是生成树&#xff0c;生…

Python之Qt输出UI

安装PySide2 输入pip install PySide2安装Qt for Python&#xff0c;如果安装过慢需要翻墙&#xff0c;则可以使用国内清华镜像下载&#xff0c;输入命令pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple PySide2&#xff0c;如下图&#xff0c; 示例Demo i…