如何在从logstash索引到elasticsearch时对文档进行重复数据删除

Kod*_*odo 8 elasticsearch logstash

我正在使用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" : [ {
...
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我在这做错了什么?

干杯

Joh*_*one 16

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

DOCUMENT_ID

Value type is string
Default value is nil
Run Code Online (Sandbox Code Playgroud)

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

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

我相信参赛作品应该是这样的:

document_id => "%{fingerprint}"
Run Code Online (Sandbox Code Playgroud)

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

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