c# - 从特定类型删除旧的Elasticsearch日志

标签 c# elasticsearch logstash nest

我正在使用Elasticsearch存储来自多个系统的日志。
我通过为每个系统日志使用不同的_type名称将日志与不同的系统分开。
我正在尝试编写旧日志删除程序,它将删除早于某个日期的日志...
当我使用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")
   })
}

我尝试了许多不同的变化很多次,但效果并不理想。我究竟做错了什么?

最佳答案

此处QQuery是互斥的,并且Query优先。

由于您要显式设置AllTypes = true,并同时指定QQuery,因此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")
   })
}

关于c# - 从特定类型删除旧的Elasticsearch日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854576/

相关文章:

java - 将 Tomcat 日志发送到 Logstash

c# - 在 C# 中列出赋值的变量?

c# - 关于在桌面应用程序中使用 Silverlight 的想法?

c# - 使用 Entity Framework 插入引用其他表中的记录的记录

javascript - Elasticsearch | "data"参数必须是字符串、TypedArray 或 DataView 类型之一

elasticsearch - Elasticsearch Reindex API部分更新

c# - 如果流大小超过1024字节,则NamedPipeServer拆分数据

javascript - 如何发出get请求来检索elasticsearch集群中某个索引的最新文档?

search - 是否可以检查 Elasticsearch 中给定的索引和类型中是否存在documentIds列表?

linux - 提供日志读取权限的方法