elasticsearch 如果日志中的文档时间字段早于文档中的当前时间字段,则日志存储忽略文档更新
我正在使用logstash处理日志文件。我的日志文件中有一个字段的类型为Date,格式为:yyyymmddhhmmssss 在Elasticsearch中,我将日志文件的每一行读取到索引中的文档中。我的日志文件中的示例行如下所示:
elasticsearch 如果日志中的文档时间字段早于文档中的当前时间字段,则日志存储忽略文档更新,
elasticsearch,logstash,
elasticsearch,Logstash,我正在使用logstash处理日志文件。我的日志文件中有一个字段的类型为Date,格式为:yyyymmddhhmmssss 在Elasticsearch中,我将日志文件的每一行读取到索引中的文档中。我的日志文件中的示例行如下所示: {"location":"Earth","sku":"0000000","quantity":"5","time":"20180813124704961"} 我的索引中的文档结构如下所示: { "_source": { "sku": "00000
{"location":"Earth","sku":"0000000","quantity":"5","time":"20180813124704961"}
我的索引中的文档结构如下所示:
{
"_source": {
"sku": "0000000",
"time": "20180813124704961",
"location": "Chicago",
"quantity": 5
}
}
我的日志不断更新,我想防止索引中有过时的数据。如何在下次处理日志文件时对照索引中的时间字段查看它是否比同一行旧或新
例如,如果日志文件的同一行中的时间字段更改为比上述时间更早,则不应更新文档,但如果时间字段值较新,则应更新文档
以下是我尝试过的(logstash.conf):
非常感谢。我为那些可能遇到类似问题的人发布了一个答案
scripted_upsert => true
action => "update"
script_lang => "painless"
script_type => "inline"
script => "if(ctx.op == 'create' || params.event.time.compareTo(ctx._source.time) > 0) ctx._source = params.event;"
文档对此并不十分清楚,但您可以通过params.event.YOUR_FIELD.compareTo
…直接进入json,访问文档中的字段,然后您可以对数据执行任何脚本
Event
是默认变量名,但您可以通过params
scripted_upsert => true
action => "update"
script_lang => "painless"
script_type => "inline"
script => "if(ctx.op == 'create' || params.event.time.compareTo(ctx._source.time) > 0) ctx._source = params.event;"