使用自定义ID字段在Elasticsearch中更新文档



我正在尝试从一些日志文件加载/获取数据,这些文件几乎是存储在第三方供应商数据库中的数据的副本。数据是管道分离的";关键字值";值,我可以使用logstash中的kv过滤器插件将其拆分。

样本数据-

1.(表=";贸易|TradeID=";1234">|数量=100 |价格=100.00 |买入或卖出=";购买"|股票=";股份有限公司";

如果我们收到对上述记录的修改,

2.(表=";贸易|TradeID=";1234">|数量=120 |价格=101.74|BuyOrSell="购买"|股票=";股份有限公司";

我们需要更新在第一个条目上创建的记录。所以,我需要将TradeID作为id字段,并需要追加记录,这样就不会有相同TradeID记录的重复。

logstash.conf的代码如下所示-

input {
file {
path => "some path"
}
}
filter {
kv {
source => "message"
field_split => "|"
value_split => "="
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => "path of .cert file"
ssl => true
ssl_certificate_verification  => true
index => "trade-index"
user => "elastic"
password => ""
}
}

您需要更新elasticsearch输出,如下所示:

output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => "path of .cert file"
ssl => true
ssl_certificate_verification  => true
index => "trade-index"
user => "elastic"
password => ""
# add the following to make it work as an upsert
action => "update"
document_id => "%{TradeID}"
doc_as_upsert => true
}
}

因此,当Logstash读取第一笔交易时,ID为1234的文档将不存在,并且将被打乱(即创建(。当第二笔交易被读取时,该文件存在,并且将被简单地更新。

相关内容

  • 没有找到相关文章

最新更新