如何使用此体系结构在弹性搜索中复制索引?



我有一个场景,我必须从多个来源导入数据(数百万条记录(并将其保存在数据库中。当用户尝试搜索与该数据相关的任何信息时,应在 2-3 秒内获得结果。

为此,我设计了一个架构,其中我使用 golang 从多个源导入数据并在 AWS SQS 中推送数据。我创建了一个 lambda 函数,该函数会在 AWS SQS 具有一些数据时触发。然后,此 lambda 函数在 AWS 弹性搜索中推送数据。我创建了一个 Rest API,使用它向用户提供结果。

我每天早上使用 CRON 来完成此导入工作。现在我的问题是,如果有一批新数据出现,我想删除现有数据并用新数据替换所有数据。 我陷入了如何实现删除和添加新数据部分的问题。

我想创建一个临时索引,然后将其替换为原始索引。但问题是我不知道导入何时结束并且可以进行此索引切换。

你所追求的概念是一个索引别名。基本工作流程是:

例如
  1. ,将今天的数据导入到带有my-index-2019-09-16的索引中。
  2. 确保导入已完成且工作正常。
  3. 将别名指向新索引(它是索引之间的原子开关(:

    POST /_aliases
    {
    "actions" : [
    { "remove" : { "index" : "my-index-2019-09-15", "alias" : "my-index" } },
    { "add" : { "index" : "my-index-2019-09-16", "alias" : "my-index" } }
    ]
    }
    
  4. 删除旧索引。

在导入过程中,您将使磁盘空间加倍,但除此之外,这应该可以正常工作,并且只有在数据具有适当的替换后才能删除数据。

最新更新