elasticsearch - 处理Elasticsearch中的重复记录

标签 elasticsearch logstash elastic-stack

我正在使用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/

相关文章:

elasticsearch - Grok模式在Kibana Grok调试器上可以正常工作,但不能与Logstash一起使用

logstash 解析时间戳半天上午/下午

Logstash grok 过滤器 - 动态命名字段

elasticsearch - 重用/缓存脚本字段以使用查询的其他部分

elasticsearch - 如何在Kibana中合并名称不同但值相同的2个字段

amazon-web-services - Logstash、EC2 和 Elasticsearch

Elasticsearch 集群未分配分片

elasticsearch - 聚合中的弹性同义词用法

php - elasticsearch查询帮助-找不到文档

mysql - 如何使用 logstash 将嵌套的 mysql 对象索引到 elasticsearch 中?