使用rollover API时,在ElasticSearch(ES)中更新现有文档

时间:2017-01-24 14:13:28

标签: elasticsearch insert-update rollover

我有一个数据源,它会创建我计划在ElasticSearch中存储的大量条目。 源为ElasticSearch中的同一文档创建了两个条目:

  • ' init'在ES
  • 中的随机密钥下记录初始化时间和其他详细信息的部分
  • '完成'包含主要数据的部分,并在init的随机密钥下更新ES中最初创建的文档(合并)。

我需要在ElasticSearch中使用基于时间的索引,别名指向实际索引, 使用rollover index。 对于更新,我将使用update API合并init并完成。

问题:如果带有随机密钥的init文档不在当前索引中(但是在已经翻过的旧文档中)将使用它的密钥更新它 成功执行?如果没有,执行更新的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

经过一番安静,我开始测试它。

简短回答:在别名下滚动索引后,使用别名的更新操作仅引用新索引,因此它将在新索引中创建文档,从而生成两个单独的文档。

解决问题的一种方法是在最后2个(或更多,如果需要)索引中执行搜索,并找出用于更新的非别名索引名称。

我更喜欢的其他解决方案是避免使用翻转,但是从文档的所需日期字段计算索引名称,并使用模板定义映射,从应用程序创建新索引。这样,事件采购和按顺序重放文档将产生相同的索引。