簡體   English   中英

如何在一段時間后從elasticsearch中的特定索引中刪除數據?

[英]How to delete data from a specific index in elasticsearch after a certain period?

我在 elasticsearch 中有一個索引,它被一些與時間戳相關的json文件占用。 我想從該索引中刪除數據。

curl -XDELETE http://localhost:9200/index_name

上面的代碼刪除了整個索引。 我的要求是在一段時間后(例如 1 周后)刪除某些數據。 我可以自動執行刪除過程嗎?

我嘗試使用curator刪除。

但我認為它刪除了timestamp創建的索引,而不是索引中的數據。 我們可以使用 curator 刪除索引中的數據嗎?

如果我知道以下任一項可行,我會很高興:

  • Curl Automate 可以在一段時間后從索引中刪除數據嗎?
  • curator Automate 可以在一段時間后從索引中刪除數據嗎?
  • 有沒有像python腳本這樣的其他方法來完成這項工作?

參考資料來自elasticsearch的官方網站。

非常感謝。

您可以使用DELETE BY QUERY API: https//www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

基本上,它將刪除與提供的查詢匹配的所有文檔:

POST twitter/_delete_by_query
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}

但是建議的方法是對不同時期(例如,天)實施索引,並使用curator根據age定期刪除它們:

...
logs_2019.03.11
logs_2019.03.12
logs_2019.03.13
logs_2019.03.14

使用按查詢刪除 API 的簡單示例:

POST index_name/_delete_by_query
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "timestamp": {
            "lte": "2019-06-01 00:00:00.0",
            "format": "yyyy-MM-dd HH:mm:ss.S"
          }
        }
      }
    }
  }
}

這將刪除具有“時間戳”字段的記錄,該字段是它們發生的日期/時間(在記錄內)。 可以運行查詢以獲取將要刪除的內容的計數。

GET index_name/_search
{
  "size": 1,
  "query: {
-- as above --

使用偏移日期也很好

         "lte": "now-30d",

這將刪除所有超過 30 天的記錄。

您始終可以使用HTTP請求方法DELETE刪除單個文檔

要知道您要刪除哪些ID,您需要查詢數據。 可能是通過在時間戳上使用范圍過濾器/查詢來實現的。

與REST api交互時,可以使用python或任何其他語言來實現。 如果您更喜歡直接使用的api,則還有一個Java客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM