logstash 使用多个字段而不是一个字段在ElasticSearch中插入文档

xqkwcwgp  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(241)

对于问题Upsert documents in Elasticsearch using custom ID field,现在我需要upsert输入中包含2+个字段的文档。
以上述问题为例-
示例数据:
TABLE="TRADE"|TradeID="1234"|Qty=100|Price=100.00|BuyOrSell="BUY"|Stock="ABCD Inc."
如果我们收到对上述记录的修改:
TABLE="TRADE"|TradeID="1234"|Qty=120|Price=101.74|BuyOrSell="BUY"|Stock="ABCD Inc."
我需要基于TradeID和Stock进行upsert。我在网站上找不到任何提到它的文档。我实际上可以创建一个新字段,它是两个字段的连接,但我想避免它。

vlju58qv

vlju58qv1#

您需要使用TradeIDStock创建一个复合ID,类似于

`document_id => "%{TradeID}-%{Stock}"`

不过,最好使用股票代码而不是股票名称。
另一种方法是使用fingerprint filter创建TradeIDStock值的一致散列,然后将该散列用作输出部分中的文档ID:

filter {
  ...
  fingerprint {
    source => ["TradeID", "Stock"]
    target => "[@metadata][id]"
  }
  ...
}
output {
  elasticsearch {
    ...
    document_id => "%{[@metadata][id]}"
    ...
  }
}

相关问题