web-dev-qa-db-ja.com

elasticsearchで30日以上経過したドキュメントを削除する

Elasticsearchインデックス内の30日以上経過したドキュメントを削除したいのですが。

何か案は?

編集:

これが自動的に行われるようにしたい-私のインデックスに30日以上古いドキュメントはありません。したがって、私の意見では、キュレーターまたはDELETE要求を使用するという2つのオプションがあります。

私は両方を試しましたが、失敗しました。 DELETE httpステートメントを使用している場合、どういうわけか、30日以上経過したすべてのドキュメントをフィルタリングして削除するフィルターを作成する必要があります。

キュレーターで試してみましたが、(私が理解している限り)キュレーターはインデックス全体しか削除しません。キュレーターを使用して30日以上経過したインデックスを削除しようとすると、タイムスタンプによりエラーが発生します。Mymoment.jsパターンは次のようになります"MMMM Do YYYY, HH:mm:ss.SSS"

編集2:私は以下をlogstash構成に追加しました:

elasticsearch
    {
    hosts => ["http://localhost:9200"]
    index => "logstash-%{type}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
    }

したがって、logstashはすべてのタイプおよび毎日特定のインデックスを作成します。これで、キュレーターを使用して、特定の日付より古いインデックスを削除できます。

問題は私見を解決しました。

9
ACKflow

DELETEクエリを使用できます: https://www.elastic.co/guide/en/elasticsearch/reference/1.6/docs-delete-by-query.html in例:クエリは2016-02-29より古いすべてを削除します

DELETE index_name/_query
{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "*"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
            "lte": "2016-02-29"
          }
        }
      }
    }
  }
}

アップデート> 6.4

公式ドキュメントによると、この関数は廃止され、_delete_by_queryに置き換えられています

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

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html