为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用这种架构复制 Elastic Search 中的索引?

如何使用这种架构复制 Elastic Search 中的索引?

Go
米琪卡哇伊 2023-07-10 15:07:20
有一个场景,我必须从多个源导入数据(数百万条记录)并将其保存在数据库中。当用户尝试搜索与该数据相关的任何信息时,他们应该在 2-3 秒内获得结果。为此,我设计了一个架构,使用 golang 从多个源导入数据并将数据推送到 AWS SQS 中。我创建了一个 lambda 函数,当 AWS SQS 有一些数据时会触发该函数。然后,此 lambda 函数将数据推送到 AWS Elastic Search 中。我创建了一个 Rest API,用它向用户提供结果。我每天早上都使用 CRON 来做这个导入工作。现在我的问题是,如果有一批新数据到来,我想删除现有数据并用新数据替换所有数据。我陷入了如何实现删除和添加新数据部分的困境。我想到了创建一个临时索引,然后用原来的索引替换它。但问题是我不知道导入何时结束并可以进行此索引切换。
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

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

  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. 删除旧索引。

您将在导入过程中将磁盘空间增加一倍,但否则这应该不会出现任何问题,并且只有在数据有正确的替换后才删除数据。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信