2015-06-21 285 views
0

这也许一个愚蠢的问题,但我现在用的是每天滚动索引保存我的logstash事件时,配置也很简单:Elasticsearch每天滚动索引包含重复的_id

input: {..source..} 
filter: {..filter..} 
output: { 
elasticsearch: { 
    document_id: %{my_own_guarantee_unique_id} 
    index: myindex-%{+YYYY.MM.DD} 
} 
} 

什么我发现了,如果有具有相同my_own_guarantee_unique_id的事件会在不同的日期出现,它会在这些日常滚动指数中创建多次,即。您可以在myindex-2015.06.21和myindex-2015.06.22中找到出现_id = 123的事件

是这种重复出箱?我该怎么做才能避免它?任何建议或阅读将不胜感激,谢谢!

回答

1

由于您使用多个索引,每天一个索引,您可以得到相同的_id。使文档唯一的是uid,它是索引,类型和id的组合。弹性没有办法改变我的知识。

+0

这很有道理Jettro。由于我使用的是logstash,在保存文档时是否有一种方法可以使用'_uid'而不是'_id'? –

+0

如果您想要做的是更新文档,如果具有相同ID的文档长度超过您可以通过更改日志存储配置中索引的模板将它们插入到一个大型索引中。问题是索引之间没有关系。无法控制不同索引的唯一性。 –

+1

同意Jettra,我最终做出了一个自定义logstash过滤器,通过通配符(logstash- *)发送查询到相关索引以查找具有该“_id”的记录,并且如果有现有记录并且不属于当天的索引,它将删除它们,并将当前事件插入当前索引 - 有点笨拙,但有效 –

0

我有完全相同的问题:几个重复的文件具有相同的id,但在不同的索引(我有1索引/日期)。

对我而言,有效的方法是使用索引名称生成一个字段,并在logstash配置的输出部分重新使用它。

index => "%{index_name}" 
document_id => "%{clickID}"