zoukankan      html  css  js  c++  java
  • SpringBoot 系列教程 Solr 之文档删除

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

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

    I. 配置

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

    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. 系列博文&项目源码

    系列博文

    项目源码

    1. 一灰灰 Blog

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

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

    一灰灰blog

  • 相关阅读:
    2-括号配对问题
    14-会场安排问题
    106-背包问题
    12-喷水装置
    HDU-5170
    HDU-1002
    贪吃蛇
    frame与bounds的区别
    MAC下Android的Eclipse开发环境的搭建
    有些人脸上太多的笑是因为他们心中有太多的泪
  • 原文地址:https://www.cnblogs.com/yihuihui/p/12199599.html
Copyright © 2011-2022 走看看