在上篇文章中我已经讲了solr的安装与配置、ik分词器的配置,今天给小伙伴们分享一下springboot如何整合solr实现增删改查。
一:导包
日常导包,不必多言
<dependencies>
<!--springBoot核心依赖,捉供了核心功能-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--引入web starter启动器 常见的场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--solr-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
<!-- 默认 starter 会加载 solrj 进来, 下面这个可不引-->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>6.6.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
需要的依赖和版本的话你们自己根据自己情况而定。
二:实体类映射
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Product {
@Field
private String id;
@Field("name")
private String productName;
@Field
private String merchant;
@Field
private String province;
@Field
private Float price;
}
三:创建solr客户端对象
HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/tea_core").build();
solr的增删改都是通过solrClient进行操作的,方法也都很简单,需要注意的是,solr的增删改查都是针对索引的,并不作用于数据库
ps:这里写你自己solr地址
四:增删改查
增加
@Test
public void testAddProductDocument() throws IOException, SolrServerException {
/*设置要添加的参数*/
Product product = new Product().builder()
.id("78787")
.merchant("1111111111111111111")
.price((float) 1200.00)
.productName("非常的帅")
.province("北京昌平")
.build();
UpdateResponse updateResponse = solrClient.addBean(product);
/*提交请求*/
solrClient.commit();
/*获取状态*/
int status = updateResponse.getStatus();
/*查看状态*/
System.out.println("status = " + status);
}
修改和添加类似,根据id修改就好了
删除
/*根据主键删除*/
@Test
public void testSolrDeleteById() throws IOException, SolrServerException {
/*设置要删除的id*/
UpdateResponse product = solrClient.deleteById("1001");
/*提交请求*/
solrClient.commit();
/*获取状态*/
int status = product.getStatus();
/*查看状态*/
System.out.println("status = " + status);
}
/*根据其他条件删除 */
@Test
public void testSolrDeleteByQueryCond() throws IOException, SolrServerException {
/*设置要删除的条件*/
UpdateResponse product = solrClient.deleteByQuery("name:男装xxxxxx");
/*提交请求*/
solrClient.commit();
/*获取状态*/
int status = product.getStatus();
/*查看状态*/
System.out.println("status = " + status);
}
solr的查询分为两种,一种是普通查询,一种是高亮查询。两者的区别就是高亮查询可以高亮显示查询结果中的关键字。下面先给大家看一下普通查询,其实操作也很简单。
/*根据默认查询:根据主键查询*/
@Test
public void testGetProductById() throws IOException, SolrServerException {
/*设置条件*/
SolrDocument solrDocument = solrClient.getById("24");
/*获取数据*/
Product product = solrClient.getBinder().getBean(Product.class, solrDocument);
/*输入数据*/
System.out.println("product = " + product);
}
下面给大家看一下solr高亮查询如何实现:
/**
* 根据其他条件高亮查询
**/
@Test
public void testHL() throws IOException, SolrServerException {
SolrQuery solrQuery = new SolrQuery();
solrQuery.set("q", "name:男衬衫");
solrQuery.setStart(3);
solrQuery.setRows(3);
//高亮
solrQuery.addHighlightField("name");
solrQuery.setHighlightSimplePre("<font color='red'>");
solrQuery.setHighlightSimplePost("</font>");
solrQuery.setSort("price", SolrQuery.ORDER.asc);
QueryResponse queryResponse = solrClient.query(solrQuery);
// 获取高亮结果
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<Product> productList = queryResponse.getBeans(Product.class);
for (Product product : productList) {
//获取高亮
String name = highlighting.get(product.getId()).get("name").get(0);
product.setProductName(name);
System.out.println("pro = " + product);
}
}