使用自定义 ID 字段在 Elasticsearch 中更新文档
Upsert documents in Elasticsearch using custom ID field
我正在尝试 load/ingest 来自一些日志文件的数据,这些数据几乎是存储在某些第三供应商的数据库中的数据的副本。数据是管道分隔的“键值”值,我可以使用 logstash 中的 kv 过滤器插件将其拆分。
样本数据-
1.) TABLE="TRADE"|TradeID="1234"|Qty=100|Price=100.00|BuyOrSell="BUY"|Stock= “ABCD 公司”
如果我们收到对上述记录的修改,
2.) TABLE="TRADE"|TradeID="1234"|Qty=120|Price=101.74|BuyOrSell="买入"|Stock="ABCD Inc."
我们需要更新在第一个条目上创建的记录。所以,我需要将 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 的文档将不存在并将被更新(即创建)。当读取第二个交易时,文档存在并且将被简单地更新。
我正在尝试 load/ingest 来自一些日志文件的数据,这些数据几乎是存储在某些第三供应商的数据库中的数据的副本。数据是管道分隔的“键值”值,我可以使用 logstash 中的 kv 过滤器插件将其拆分。
样本数据-
1.) TABLE="TRADE"|TradeID="1234"|Qty=100|Price=100.00|BuyOrSell="BUY"|Stock= “ABCD 公司”
如果我们收到对上述记录的修改,
2.) TABLE="TRADE"|TradeID="1234"|Qty=120|Price=101.74|BuyOrSell="买入"|Stock="ABCD Inc."
我们需要更新在第一个条目上创建的记录。所以,我需要将 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 的文档将不存在并将被更新(即创建)。当读取第二个交易时,文档存在并且将被简单地更新。