在ES中,刪除文檔有多種方式和不同的注意點。本文將從以下幾個方面對ES刪除文檔進行詳細闡述:
一、根據ID刪除文檔
使用ES進行文檔刪除的一種簡單方式是根據文檔ID進行刪除。每個文檔在ES中都有唯一的ID,可以通過ID來進行文檔的刪除。
DELETE /{index}/{type}/{id}
其中,{index}表示索引名,{type}表示類型名,{id}表示要刪除的文檔ID。例如,要刪除名為「test_index」中類型為「test_type」中id為「1」的文檔:
DELETE /test_index/test_type/1
需要注意的是,如果嘗試刪除一個不存在的ID,Elasticsearch會返回一個404響應和錯誤信息。
二、根據查詢刪除文檔
除了根據ID進行文檔刪除之外,還可以使用查詢語句來刪除符合條件的所有文檔。
POST /{index}/{type}/_delete_by_query { "query": { "bool": { "must": [ { "match": { "title": "測試" }}, { "match": { "content": "文檔內容" }} ] } } }
其中,{index}表示要刪除文檔的索引名,{type}表示要刪除文檔的類型。上述代碼將會刪除所有索引名為「test_index」中類型為「test_type」中符合查詢條件的文檔。
需要注意的是,如果查詢語句太過複雜、文檔數量龐大,Elasticsearch會消耗大量的資源和時間,建議非必要情況下謹慎使用。
三、使用Bulk API刪除文檔
有時候,需要批量刪除文檔,這時候可以使用ES提供的Bulk API。
POST /{index}/{type}/_bulk {"delete":{"_id":"1"}} {"delete":{"_id":"2"}}
上述代碼將會刪除索引名為「test_index」類型為「test_type」中ID為1和2的文檔。
需要注意的是,Bulk API可以一次性處理多個刪除操作。同時,ES的_delete_by_query介面會受到節省的IoC和內存資源的影響,因此,在面對批量刪除需求時,使用Bulk API是一個更加可靠的選擇。
四、刪除自定義Routing的文檔
在ES中,Routing是指由客戶端指定的文檔路由策略。基於這種策略,可以將相關的文檔放在一起的shard內。
在刪除某些shard內的文檔時也需要使用Routing參數,如下所示:
DELETE /{index}/{type}/{id}?routing={routing}
其中,routing參數需要指定,以保證刪除的文檔確實在該routing參數所指定的shard內。
總結
本文介紹了ES刪除文檔的多種方式,包括根據ID刪除文檔、根據查詢刪除文檔、使用Bulk API刪除文檔和刪除自定義Routing的文檔。通過本文的講解,讀者可以清晰地了解ES中刪除文檔的操作方法和注意事項。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/284742.html