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); }- 测试结果:

- 注意:这里只列出了部分字段属性和代码。
- 创建用于映射



















