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

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

  • 添加依赖

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-solrartifactId>
        <version>2.4.10version>
    dependency>
    
    
    <dependency>
        <groupId>org.apache.solrgroupId>
        <artifactId>solr-solrjartifactId>
        <version>8.9.0version>
    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);
    }
    
    • 测试结果:

    SpringBoot集成Solr(一)保存数据到Solr_第1张图片

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

你可能感兴趣的:(实践是检验真理的唯一标准,spring,boot,solr,后端)