在elasticsearch中删除超过30天的文档

时间:2016-03-29 15:05:04

标签: json windows elasticsearch logstash kibana

我想删除弹性搜索索引中超过30天的文档。

有什么想法吗?

编辑:

我希望这是自动发生的 - 我的索引中的文档不应超过30天。 因此,在我看来有两种选择:使用策展人或DELETE请求。

我试过了两次,但我失败了。 不知何故,我必须创建一个过滤器,过滤掉30天以前的所有文件并删除它们,当我使用DELETE http语句时。

我尝试过策展人,但策展人(据我所知)只删除整个索引。尝试使用策展人删除超过30天的索引时,我的时间戳会导致错误。我的moment.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为每种类型和每天创建特定索引。 现在我可以使用策展人删除比特定日期更早的索引。

问题解决了imho。

2 个答案:

答案 0 :(得分:21)

您可以使用DELETE查询: https://www.elastic.co/guide/en/elasticsearch/reference/1.6/docs-delete-by-query.html 例如,查询将删除早于以下内容的所有内容: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

答案 1 :(得分:4)

如果您有定期索引(每日,每周等),请使用curator