我想删除弹性搜索索引中超过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。
答案 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。