5

我在 elasticsearch 中有一个索引,其中包含一些关于timestamp的json文件。我想从该索引中删除数据。

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

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

我尝试使用curator删除。

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

如果我知道以下任何一项都可以工作,我会很高兴:

  • Curl Automate 可以在一段时间后从索引中删除数据吗?
  • curator Automate 可以在一段时间后从索引中删除数据吗?
  • 有没有像 python 脚本这样的其他方式来完成这项工作?

参考资料来自elasticsearch的官方网站。

提前非常感谢。

4

3 回答 3

4

您可以使用DELETE BY QUERYAPI: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
于 2019-03-14T10:42:52.327 回答
3

使用按查询删除 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 天的记录。

于 2019-09-24T13:13:33.413 回答
0

您始终可以使用HTTP 请求方法 DELETE删除单个文档

要知道您要删除哪些 id,您需要查询您的数据。可能是通过对您的时间戳使用范围过滤器/查询。

当您与 REST api 交互时,您可以使用 python 或任何其他语言来执行此操作。如果您更喜欢更直接的 api,还有一个 Java 客户端。

于 2019-03-14T10:32:59.387 回答