天天看點

Elasticsearch删除操作詳解

01 題記

想到删除,基礎認知是delete,細分為删除文檔(document)和删除索引;要删除曆史資料,基礎認知是:删除了給定條件的資料,用delete_by_query。

實際操作發現:

02 常見的删除操作

2.1 删除單個文檔

1DELETE /twitter/_doc/1

2.2 删除滿足給定條件的文檔

1POST twitter/_delete_by_query

2{

3 "query": {

4 "match": {

5 "message": "some message"

6 }

7 }

8}

注意:執行批量删除的時候,可能會發生版本沖突。強制執行删除的方式如下:

1POST twitter/_doc/_delete_by_query?conflicts=proceed

4 "match_all": {}

5 }

6}

2.3 删除單個索引

1DELETE /twitter

2.4 删除所有索引

1DELETE /_all

或者

1DELETE /*

删除所有索引是非常危險的操作,要注意謹慎操作。

03 删除文檔背景做了什麼?

執行删除後的傳回結果:

1{

2 "_index": "test_index",

3 "_type": "test_type",

4 "_id": "22",

5 "_version": 2,

6 "result": "deleted",

7 "_shards": {

8 "total": 2,

9 "successful": 1,

10 "failed": 0

11 },

12 "_seq_no": 2,

13 "_primary_term": 17

14}

解讀:

索引的每個文檔都是版本化的。

删除文檔時,可以指定版本以確定我們試圖删除的相關文檔實際上被删除,并且在此期間沒有更改。

每個在文檔上執行的寫操作,包括删除,都會使其版本增加。

真正的删除時機:

04 删除索引和删除文檔的差別?

1)删除索引是會立即釋放空間的,不存在所謂的“标記”邏輯。

2)删除文檔的時候,是将新文檔寫入,同時将舊文檔标記為已删除。 磁盤空間是否釋放取決于新舊文檔是否在同一個segment file裡面,是以ES背景的segment merge在合并segment file的過程中有可能觸發舊文檔的實體删除。

但因為一個shard可能會有上百個segment file,還是有很大幾率新舊文檔存在于不同的segment裡而無法實體删除。想要手動釋放空間,隻能是定期做一下force merge,并且将max_num_segments設定為1。

1POST /_forcemerge

05 如何僅儲存最近100天的資料?

有了上面的認知,僅儲存近100天的資料任務分解為:

删除腳本如下:

1#!/bin/sh

2curl -H'Content-Type:application/json' -d'{

4 "range": {

5 "pt": {

6 "lt": "now-100d",

7 "format": "epoch_millis"

8 }

9 }

10 }

11}

12' -XPOST "http://192.168.1.101:9200/logstash_*/

13_delete_by_query?conflicts=proceed"

merge腳本如下:

2curl -XPOST 'http://192.168.1.101:9200/_forcemerge?

3only_expunge_deletes=true&max_num_segments=1'

06 有沒有更通用的方法?

有,使用ES官網工具——curator工具。

6.1 curator簡介

主要目的:規劃和管理ES的索引。支援常見操作:建立、删除、合并、reindex、快照等操作。

6.2 curator官網位址

6.3 curator安裝向導

位址:http://t.cn/RuwCkBD

注意:

curator各種部落格教程層出不窮,但curator舊版本和新版本有較大差異,建議參考官網最新手冊部署。

舊版本指令行方式新版本已不支援。

6.4 curator指令行操作

1$ curator --help

2Usage: curator [OPTIONS] ACTION_FILE

3 Curator for Elasticsearch indices.

4 See http://elastic.co/guide/en/elasticsearch/client/curator/current

5Options:

6 --config PATH Path to configuration file. Default: ~/.curator/curator.yml

7 --dry-run Do not perform any changes.

8 --version Show the version and exit.

9 --help Show this message and exit.

核心:

6.5 curator适用場景

最重要的是:

07 小結

繼續閱讀