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 {@Beanpublic 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;@Beanpublic 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;@Fieldprivate String id;/*** 作者*/@Fieldprivate String creationBy_s;/*** 摘要*/@Fieldprivate String summary_ik;/*** 内容*/@Fieldprivate String content_ik; }
- 将实体
KnowledgeIk
保存到Solr
:
@Service public class KmKnowledgeServiceImpl implements IKmKnowledgeService {/*** solr服务*/@Resourceprivate SolrClient solrClient;@Overridepublic 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); }
- 测试结果:
- 注意:这里只列出了部分字段属性和代码。
- 创建用于映射