使用elasticsearch收集日志进行处理,时间久了,很老的数据就没用了或者用途不是很大,这个时候就要对过期数据进行清理.但是es5.0之后就不支持ttl,那怎么办呢?
1,请使用官方的工具elasticsearch-curator
2,使用delete-by-query方法删除特定时间范围的数据
第一种这里不再介绍了,直接看官网吧,主要说下第二种
语法格式如下:
POST twitter/_delete_by_query { "query": { "match": { "message": "some message" } } }
比如我们要根据时间戳字段删除2019-06-07的数据:
http://serverhost:9200/index/type/_delete_by_query post { "query": { "match": { "@timestamp": "2019-06-07" } }
返回的结果是:
{ "took" : 147, "timed_out": false, "deleted": 119, "batches": 1, "version_conflicts": 0, "noops": 0, "retries": { "bulk": 0, "search": 0 }, "throttled_millis": 0, "requests_per_second": -1.0, "throttled_until_millis": 0, "total": 119, "failures" : [ ] }
当然也可以按照范围删除,用法如下:
POST twitter/_delete_by_query?routing=1 { "query": { "range" : { "age" : { "gte" : 10 } } } }
上面的是删除age>10的数据.
默认情况下delete-by-query会一次查询1000条数据,你可以通过下面设置改变这个大小:
POST twitter/_delete_by_query?scroll_size=5000 { "query": { "term": { "user": "kimchy" } } }