我正在考虑使用日常脚本来执行以下操作,以解决ES服务器上更新存在问题的任何情况(我还没有高可用性设置,即使如此,它仍然可能是在数据库和ES之间复制数据的情况下的良好做法)。在把这个脚本放在一起之前,我想我会检查一下是否要以正确的方式进行操作,以及是否应该使用任何库或技术。
该脚本将简单地从数据库中检索所有ID,并从ElasticSearch中检索所有ID,其中created_at < current_time(当前时间的快照,因为它是脚本运行时的移动目标)。然后,它将根据这些ID集之间的差异向Elastic搜索添加和删除。
created_at < current_time
这听起来像是一种合理的方法吗?
要回答我的问题,这不是最佳方法。
一种更简单(如果需要更多资源)的方法是定期重建整个索引。当然,这在生产中很难做到,因为这会导致数分钟或数小时的停机时间,因此诀窍是重建新索引并转而使用该索引。在ElasticSearch中,您无法重命名索引,但可以使用别名。
这里讨论了该方法,并在这里为Tyre用户提供了一项抽佣任务。