【问题标题】:Elasticsearch daily rolling index contains duplicate _idElasticsearch 每日滚动索引包含重复的_id
【发布时间】:2017-12-23 02:55:16
【问题描述】:

这可能是一个愚蠢的问题,但我使用每日滚动索引来使用 logstash 保存我的事件,配置很简单:

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 的事件

这种副本是开箱即用的吗?我应该怎么做才能避免它?任何建议或阅读将不胜感激,谢谢!

【问题讨论】:

    标签: elasticsearch logstash


    【解决方案1】:

    由于您使用多个索引,每天一个,您可以获得相同的_id。使文档独一无二的是 uid,它是 index、type 和 id 的组合。据我所知,弹性没有办法改变这一点。

    【讨论】:

    • 这是有道理的 Jettro。由于我使用的是logstash,有没有办法在保存文档时使用_uid 而不是_id
    • 如果您想要做的是更新文档,如果具有相同 id 的文档比您可以通过更改日志存储配置中的索引模板将它们插入一个大索引中的时间长。问题是索引之间没有关系。无法控制不同索引的唯一性。
    • 同意 Jettro,我最终制作了一个自定义的 logstash 过滤器,该过滤器通过通配符 (logstash-*) 向相关索引发送查询,以获取具有 _id 的记录以及是否存在现有记录而不是属于当天的索引,它将删除它们并将当前事件插入当前索引 - 有点笨拙但有效
    【解决方案2】:

    我遇到了完全相同的问题:多个具有相同 ID 但索引不同的重复文档(我有 1 个索引/日期)。

    对我有用的是生成一个带有索引名称的字段,并在 logstash 配置的输出部分重用它。

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

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2014-01-22
      • 2015-02-26
      • 2019-01-17
      • 1970-01-01
      相关资源
      最近更新 更多