SpringBoot系列教程Solr之文档删除

编程

200114-SpringBoot 系列教程 Solr 之文档删除

之前的搜索教程开了个头就没有继续了,现在重新捡回来,至少也把 CURD 的基本操作姿势补全了;本篇主要介绍如何删除数据

<!-- more -->

I. 配置

在介绍 demo 之前,需要先安装 solr 环境,搭建 SpringBoot 项目工程,具体的环境搭建过程不细说,推荐参考文档

  • 190510-SpringBoot 高级篇搜索之 Solr 环境搭建与简单测试

application.yml 配置文件中红,指定 solr 的域名

spring:

data:

solr:

host: http://127.0.0.1:8983/solr

然后在 solr 中,写入一些数据,供我们删除使用,可以通过控制台的方式写入,也可以通过190526-SpringBoot 高级篇搜索 Solr 之文档新增与修改使用姿势 这篇文档的 case 添加

{

"id":"1",

"content_id":1,

"title":"一灰灰blog",

"content":"这是一灰灰blog的内容",

"type":1,

"create_at":1578912072,

"publish_at":1578912072,

"_version_":1655609540674060288},

{

"id":"2",

"content_id":2,

"title":"一灰灰",

"content":"这是一灰灰的内容",

"type":1,

"create_at":1578912072,

"publish_at":1578912072,

"_version_":1655609550229733376},

{

"id":"3",

"content_id":3,

"title":"solrTemplate 修改之后!!!",

"create_at":1578912072,

"publish_at":1578912072,

"type":0,

"_version_":1655609304941592576},

{

"id":"4",

"content_id":4,

"type":1,

"create_at":0,

"publish_at":0,

"_version_":1655609305022332928},

{

"id":"5",

"content_id":5,

"title":"addBatchByBean - 1",

"content":"新增一个测试文档",

"type":1,

"create_at":1578912072,

"publish_at":1578912072,

"_version_":1655609304836734976},

{

"id":"6",

"content_id":6,

"title":"addBatchByBean - 2",

"content":"新增又一个测试文档",

"type":1,

"create_at":1578912072,

"publish_at":1578912072,

"_version_":1655684018701598720

}

II. 删除

我们依然是使用SolrTemplate来操作 solr 的正删改查,它整合了 solr 的各种基本操作

1. 根据主键删除

请注意,这种 case 是根据主键 id 进行删除的,支持批量删除,需要solrTemplate.commit("yhh");这一行来提交修改

private void deleteById() {

solrTemplate.deleteByIds("yhh", Arrays.asList("4"));

solrTemplate.commit("yhh");

}

2. 查询删除

上面根据主键删除适合精准的删除操作,但是适用性有限;下面介绍查询删除的方式,将满足查询条件的数据都删除掉

private void deleteByQuery() {

SolrDataQuery query = new SimpleQuery();

query.addCriteria(Criteria.where("content").startsWith("新增"));

solrTemplate.delete("yhh", query);

solrTemplate.commit("yhh");

}

上面提供了一个简单的查询条件,删除 content 内容以新增开头的文档,至于查询语句的使用姿势在下一篇介绍 Solr 的查询姿势时详细说明

3. 测试

接下来测试一下上面的两种 case

首先我们提供一个输出所有文档的方法,用于对比删除前后的数据变化

private void printAll(String tag) {

System.out.println("

---------> query all " + tag + " start <------------

");

List<DocDO> list = solrTemplate.query("yhh", new SimpleQuery("*:*").addSort(Sort.by("content_id").ascending()), DocDO.class)

.getContent();

list.forEach(System.out::println);

System.out.println("

---------> query all " + tag + " over <------------

");

}

接下来是方法调用

@Autowired

private SolrTemplate solrTemplate;

public void delete() {

printAll("init");

this.deleteById();

this.deleteByQuery();

printAll("afterDelete");

}

输出结果如下,id 为 4,5,6 的都被删除了

---------> query all init start <------------

DocDO(id=1, contentId=1, title=一灰灰blog, content=这是一灰灰blog的内容, type=1, createAt=1578912072, publishAt=1578912072)

DocDO(id=2, contentId=2, title=一灰灰, content=这是一灰灰的内容, type=1, createAt=1578912072, publishAt=1578912072)

DocDO(id=3, contentId=3, title=solrTemplate 修改之后!!!, content=null, type=0, createAt=1578988256, publishAt=1578988256)

DocDO(id=4, contentId=4, title=null, content=null, type=1, createAt=0, publishAt=0)

DocDO(id=5, contentId=5, title=addBatchByBean - 1, content=新增一个测试文档, type=1, createAt=1578988256, publishAt=1578988256)

DocDO(id=6, contentId=6, title=addBatchByBean - 2, content=新增又一个测试文档, type=1, createAt=1578988256, publishAt=1578988256)

---------> query all init over <------------

---------> query all afterDelete start <------------

DocDO(id=1, contentId=1, title=一灰灰blog, content=这是一灰灰blog的内容, type=1, createAt=1578912072, publishAt=1578912072)

DocDO(id=2, contentId=2, title=一灰灰, content=这是一灰灰的内容, type=1, createAt=1578912072, publishAt=1578912072)

DocDO(id=3, contentId=3, title=solrTemplate 修改之后!!!, content=null, type=0, createAt=1578988256, publishAt=1578988256)

---------> query all afterDelete over <------------

II. 其他

0. 系列博文&项目源码

系列博文

  • 190526-SpringBoot 高级篇搜索 Solr 之文档新增与修改使用姿势
  • 190510-SpringBoot 高级篇搜索之 Solr 环境搭建与简单测试

项目源码

  • 工程:https://github.com/liuyueyi/spring-boot-demo
  • 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/140-search-solr

1. 一灰灰 Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

  • 一灰灰 Blog 个人博客 https://blog.hhui.top
  • 一灰灰 Blog-Spring 专题博客 http://spring.hhui.top

以上是 SpringBoot系列教程Solr之文档删除 的全部内容, 来源链接: utcz.com/z/512763.html

回到顶部