一尘不染

如何从Logstash索引到Elasticsearch中时对文档进行重复数据删除

elasticsearch

我将Logstash
1.4.1和ES1.01一起使用,并希望根据计算出的校验和替换已经索引的文档。我目前在Logstash中使用“指纹”过滤器,该过滤器根据指定的算法创建“指纹”字段。现在-
我要完成的任务是ES 根据相同的指纹值替换现有的文档

例如,假设我有一个指纹字段值为“ 2c9a6802e10fbcff36177e0b88993f90868fa6fa”的文档。现在-
如果要对具有相同指纹值的文档建立索引,我希望它替换索引中已经存在的 文档。

我尝试将以下内容添加到“ elasticsearch-template.json”模板文件中,该文件假定由Logstash ES输出插件使用:

...
  "mappings" : {
    "_default_" : {
       "_id" : {"index": "not_analyzed", "store" : false, "path" : "fingerprint" },
       "_all" : {"enabled" : true},
       "dynamic_templates" : [ {
...

但这不起作用。我在这里做错了什么?

干杯


阅读 548

收藏
2020-06-22

共1个答案

一尘不染

我将在您的logstash elasticsearch输出部分中使用document_id参数:

document_id

Value type is string
Default value is nil

索引的文档ID。用于覆盖具有相同ID的Elasticsearch中的现有条目。

https://www.elastic.co/guide/zh-CN/logstash/current/plugins-outputs-
elasticsearch.html#plugins-outputs-elasticsearch-
document_id

我认为该条目应如下所示:

document_id => "%{fingerprint}"

它使用logstash的sprintf格式将字符串替换为字段的内容:

https://www.elastic.co/guide/zh-CN/logstash/current/event-dependent-
configuration.html#sprintf

2020-06-22