elasticsearch,logstash,nest,C#,elasticsearch,Logstash,Nest" /> elasticsearch,logstash,nest,C#,elasticsearch,Logstash,Nest" />

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

C# 从特定类型中删除旧elasticsearch日志,c#,elasticsearch,logstash,nest,C#,elasticsearch,Logstash,Nest,我正在使用elasticsearch存储来自多个系统的日志。 我通过为每个系统日志使用不同的_类型名称来分离不同系统中的日志。 我正在尝试编写一个旧日志删除程序,它将删除超过某个日期的日志。。。 当我使用Nest执行此操作时,似乎删除了所有类型,而不仅仅是我指定的类型 var client = new ElasticClient(new ConnectionSettings(new Uri("http://localhost:9200"),"someindex"); client.deleteB

我正在使用elasticsearch存储来自多个系统的日志。 我通过为每个系统日志使用不同的_类型名称来分离不同系统中的日志。 我正在尝试编写一个旧日志删除程序,它将删除超过某个日期的日志。。。 当我使用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")
   })
}

我尝试了很多次不同的变化,但都没有达到预期效果。我做错了什么?

您可以直接使用curl进行操作,如下所示

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

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

Q
Query
在这里是互斥的,并且
Query
优先

由于您显式设置了
AllTypes=true
,并同时指定了
Q
Query
Q
被忽略,并且
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")
   })
}