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

时间:2019-03-14 09:50:39

标签: elasticsearch curl logstash kibana elasticsearch-curator

我在Elasticsearch中有一个索引,相对于时间戳,该索引已被某些 json 文件占用。 我想从该索引中删除数据。

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

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

我尝试使用curator进行删除。

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

如果我知道以下任何一种方法都能奏效,那将是很高兴的事情:

  • Curl是否可以在一段时间后自动从索引中删除数据?
  • 馆长可以在一段时间后自动从索引中删除数据吗?
  • 还有其他类似python脚本的方式来完成这项工作吗?

引用来自elasticsearch的官方网站。

非常感谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

这将删除具有“时间戳”字段的记录,该字段是记录发生的日期/时间(在记录内)。可以运行查询以获取要删除的内容的计数。

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

也可以使用偏移日期

         "lte": "now-30d",

这将删除所有30天以上的记录。

答案 2 :(得分:0)

您始终可以使用documents删除单个HTTP request method DELETE

要知道要删除哪些ID,需要查询数据。可能是在时间戳上使用了范围过滤器/查询。

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