我正在使用Hadoop + ELK堆栈来构建分析堆栈。我试图每天刷新索引。
我正在使用来自CSV格式的第三方的数据。我无法控制输入数据,即我不能要求更改CSV文件的架构。
问题是CSV记录中没有唯一的ID,或者甚至合并列以创建唯一的ID也将不起作用。因此,在刷新Elasticsearch时,会将重复数据添加到索引中。
所以,如果第一天的数据像
Product1,Language1,Date1,$1
Product2,Language2,Date1,$12
第2天的数据变为
Product1,Language1,Date1,$1
Product2,Language2,Date1,$12
Product1,Language1,Date1,$1
Product2,Language2,Date1,$12
Product3,Language1,Date2,$5(new record added on day2)
有什么好方法可以在ELK中处理此问题。我正在使用Logstash来使用csv文件。
最佳答案
我认为这全都与文档“_id”有关。
如果每个文档都有唯一的“_id”,那么就不会有问题,因为您只需将文档“更新”为相同的值即可。如果需要,您甚至可以将映射设置为不允许更新。
您的问题是您没有将文档的“_id”链接到文档的内容(在某些情况下还可以)。
我猜一个简单的解决方案是创建自己的“my_id”字段并将“_id”的路径设置为它,例如here。
然后,问题就变成了如何创建“my_id”字段。我会在文档上使用哈希。
一个示例python片段将是(我确定您可以找到合适的ruby插件):
import hashlib
hash_object = hashlib.sha1(b"Product2,Language2,Date1,$12")
hex_dig = hash_object.hexdigest()
print(hex_dig)
关于elasticsearch - 处理Elasticsearch中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430255/