即使是不成熟的尝试,也胜于胎死腹中的策略。

elasticsearch去重的问题

Elasticsearch | 作者 nosec | 发布于2016年10月13日 | 阅读数:13118

我有一些数据,可能有很多重复的,比如username,ip,UA等等,这些数据是实时产生的,也就是说可能是产生的时间是不一样的。
 
目前是用logstash来实时写数据进elasticsearch的,我想问的是
 
 
如何确保写入elasticsearch的数据是不重复的。
 
logstash在写数据之前,是否可以先到elasticsearch查询一下然后在决定写入不写入呢?
 
 
已邀请:

leighton_buaa

赞同来自: nosec

input {
kafka {
// ...
}
}

filter {
ruby {
code => '
require "digest/sha1"
event["doc_id"] = Digest::SHA1.hexdigest(event["username"]+event["ip"])[0..20]
'
}
}

output {
elasticsearch { hosts => ["localhost"] index => "index_name" document_type => "type_name" document_id => "%{[doc_id]}" }
}

event["doc_id"] 是由 
event["username"]和event["ip"]生成的,只要这两个值不变,生成的doc_id就不变

 

leighton_buaa

赞同来自:

换个思路,logstash往es插入时,利用username,ip,UA等等生成doc_id,这样在写入ES的时候就会将原来旧的doc覆盖

wx7614140 - 码农一只

赞同来自:

在插入es的时候手动指定_id.
这个_id你确保不重复

pqy

赞同来自:

第一步 、mutate {add_field => { "[@metadata][id]" => "%{id}"}

第二步、document_id => "%{[@metadata][id]}"

要回复问题请先登录注册