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); }
- 测试结果:
- 注意:这里只列出了部分字段属性和代码。
- 创建用于映射