200114-SpringBoot 系列教程 Solr 之文档删除
以前的搜索教程开了个头就没有继续了,如今从新捡回来,至少也把 CURD 的基本操做姿式补全了;本篇主要介绍如何删除数据java
<!-- more -->git
在介绍 demo 以前,须要先安装 solr 环境,搭建 SpringBoot 项目工程,具体的环境搭建过程不细说,推荐参考文档github
在application.yml
配置文件中红,指定 solr 的域名spring
spring: data: solr: host: http://127.0.0.1:8983/solr
而后在 solr 中,写入一些数据,供咱们删除使用,能够经过控制台的方式写入,也能够经过190526-SpringBoot 高级篇搜索 Solr 之文档新增与修改使用姿式 这篇文档的 case 添加json
{ "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 }
咱们依然是使用SolrTemplate
来操做 solr 的正删改查,它整合了 solr 的各类基本操做app
请注意,这种 case 是根据主键 id 进行删除的,支持批量删除,须要solrTemplate.commit("yhh");
这一行来提交修改spring-boot
private void deleteById() { solrTemplate.deleteByIds("yhh", Arrays.asList("4")); solrTemplate.commit("yhh"); }
上面根据主键删除适合精准的删除操做,可是适用性有限;下面介绍查询删除的方式,将知足查询条件的数据都删除掉学习
private void deleteByQuery() { SolrDataQuery query = new SimpleQuery(); query.addCriteria(Criteria.where("content").startsWith("新增")); solrTemplate.delete("yhh", query); solrTemplate.commit("yhh"); }
上面提供了一个简单的查询条件,删除 content 内容以新增
开头的文档,至于查询语句的使用姿式在下一篇介绍 Solr 的查询姿式时详细说明测试
接下来测试一下上面的两种 caseui
首先咱们提供一个输出全部文档的方法,用于对比删除先后的数据变化
private void printAll(String tag) { System.out.println("\n---------> query all " + tag + " start <------------\n"); 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("\n---------> query all " + tag + " over <------------\n"); }
接下来是方法调用
@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 <------------
系列博文
项目源码
尽信书则不如,以上内容,纯属一家之言,因我的能力有限,不免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的我的博客,记录全部学习和工做中的博文,欢迎你们前去逛逛