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 或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛