如何使用此架构在 Elastic Search 中复制索引?
How can I copy index in Elastic Search with this architecture?
我有一个场景,我必须从多个来源导入数据(数百万条记录)并将其保存在数据库中。当用户尝试搜索与该数据相关的任何信息时,他们应该会在 2-3 秒内获得结果。
为此,我设计了一个架构,我使用 golang 从多个来源导入数据并在 AWS SQS 中推送数据。我创建了一个 lambda 函数,它在 AWS SQS 有一些数据时触发。然后,此 lambda 函数将数据推送到 AWS Elastic Search 中。我创建了一个 Rest API,我使用它向用户提供结果。
我每天早上都使用 CRON 来做这个导入工作。现在我的问题是,如果有一批新数据出现,我想删除现有数据并用新数据替换所有数据。
我坚持如何实现删除和添加新数据部分。
我想创建一个临时索引,然后用原来的索引替换它。但是问题是我不知道什么时候导入结束,可以让这个索引切换。
您所追求的概念是 index alias。基本工作流程是:
- 将今天的数据导入索引
my-index-2019-09-16
(例如)。
- 确保导入已完成且工作正常。
将别名指向新索引(这是索引之间的原子切换):
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "my-index-2019-09-15", "alias" : "my-index" } },
{ "add" : { "index" : "my-index-2019-09-16", "alias" : "my-index" } }
]
}
删除旧索引。
您将在导入过程中加倍磁盘 space,但除此之外这应该没有任何问题,您只有在数据有适当的替换后才删除数据。
我有一个场景,我必须从多个来源导入数据(数百万条记录)并将其保存在数据库中。当用户尝试搜索与该数据相关的任何信息时,他们应该会在 2-3 秒内获得结果。
为此,我设计了一个架构,我使用 golang 从多个来源导入数据并在 AWS SQS 中推送数据。我创建了一个 lambda 函数,它在 AWS SQS 有一些数据时触发。然后,此 lambda 函数将数据推送到 AWS Elastic Search 中。我创建了一个 Rest API,我使用它向用户提供结果。
我每天早上都使用 CRON 来做这个导入工作。现在我的问题是,如果有一批新数据出现,我想删除现有数据并用新数据替换所有数据。 我坚持如何实现删除和添加新数据部分。
我想创建一个临时索引,然后用原来的索引替换它。但是问题是我不知道什么时候导入结束,可以让这个索引切换。
您所追求的概念是 index alias。基本工作流程是:
- 将今天的数据导入索引
my-index-2019-09-16
(例如)。 - 确保导入已完成且工作正常。
将别名指向新索引(这是索引之间的原子切换):
POST /_aliases { "actions" : [ { "remove" : { "index" : "my-index-2019-09-15", "alias" : "my-index" } }, { "add" : { "index" : "my-index-2019-09-16", "alias" : "my-index" } } ] }
删除旧索引。
您将在导入过程中加倍磁盘 space,但除此之外这应该没有任何问题,您只有在数据有适当的替换后才删除数据。