SpringBoot 系列教程 Solr 之文檔刪除

200114-SpringBoot 系列教程 Solr 之文檔刪除

以前的搜索教程開了個頭就沒有繼續了,如今從新撿回來,至少也把 CURD 的基本操做姿式補全了;本篇主要介紹如何刪除數據java

<!-- more -->git

I. 配置

在介紹 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
}

II. 刪除

咱們依然是使用SolrTemplate來操做 solr 的正刪改查,它整合了 solr 的各類基本操做app

1. 根據主鍵刪除

請注意,這種 case 是根據主鍵 id 進行刪除的,支持批量刪除,須要solrTemplate.commit("yhh");這一行來提交修改spring-boot

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. 測試

接下來測試一下上面的兩種 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 <------------

II. 其餘

0. 系列博文&項目源碼

系列博文

項目源碼

1. 一灰灰 Blog

盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現 bug 或者有更好的建議,歡迎批評指正,不吝感激

下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛

一灰灰blog

相關文章
相關標籤/搜索