从特定类型中删除旧的elasticsearch日志

时间:2015-03-04 12:29:55

标签: c# elasticsearch logstash nest

我使用elasticsearch来存储来自多个系统的日志。 我通过为每个系统日志使用不同的_type名称来分隔来自不同系统的日志。 我正在尝试编写一个old-logs-deleter,它将删除比某个日期更早的日志... 当我使用Nest执行此操作时,似乎我删除了所有类型,而不仅仅是我指定的类型。

var client = new ElasticClient(new ConnectionSettings(new Uri("http://localhost:9200"),"someindex");
client.deleteByQuery(new DeleteByQueryRequest
{
   AllIndices = true,
   AllType = true,
   Q = "_type:someType",
   Query = new QueryContainer(new RangeQuery
   {
       Field = new PropertyPathMarker
       {
           Name = "@timestamp"
       },
       LowerThan = dateToSaveFrom.ToString("O")
   })
}

我尝试了很多次不同的变化,它只是没有按预期工作。我做错了什么?

2 个答案:

答案 0 :(得分:2)

QQuery在此处互斥,Query优先。

由于您明确设置AllTypes = true,同时指定QQueryQ将被忽略,RangeQuery正在全部运行你的类型。

相反,只需删除Q并使用Types仅指定您要删除的类型。

new DeleteByQueryRequest
{
   AllIndices = true,
   Types = new TypeNameMarker [] { "someType" },
   Query = new QueryContainer(new RangeQuery
   {
       Field = new PropertyPathMarker
       {
           Name = "@timestamp"
       },
       LowerThan = dateToSaveFrom.ToString("O")
   })
}

答案 1 :(得分:0)

您可以使用curl直接执行此操作。

curl -XDELETE 'http://localhost:9200/index/type/_query' -d '{
    "match_all" : {}
}'

这里通过指向索引和类型,您可以删除类型。