如何在一段时间后从elasticsearch中的特定索引中删除数据?

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

我在 elasticsearch 中有一个索引被一些 json 文件占用,与 timestamp 有关。 我想从该索引中删除数据。

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

以上代码删除了整个索引。我的要求是在一段时间后(例如 1 周后)删除某些数据。我可以自动执行删除过程吗?

我尝试使用 curator 删除。

但我认为它会删除 timestamp 创建的索引,而不是索引中的数据。我们可以使用 curator 删除索引中的数据吗?

如果我知道以下任何一个都行得通,我将很高兴:

引用自elasticsearch.

的官方网站

非常感谢。

您可以随时删除单个 documents by using the HTTP request method DELETE

要知道您要删除哪些 ID,您需要查询您的数据。可能是通过在时间戳上使用范围 filter/query。

当您与 REST api 交互时,您可以使用 python 或任何其他语言进行交互。如果您更喜欢更直接的 api.

,还有一个 Java 客户端

您可以使用 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

使用Delete By Query 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"
          }
        }
      }
    }
  }
}

这将删除具有字段 "timestamp" 的记录,该字段是它们出现的 date/time(在记录中)。可以 运行 查询以获取将要删除的内容的计数。

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

使用偏移日期也很好

         "lte": "now-30d",

这将删除所有超过 30 天的记录。