老师,有一处地方让我很疑惑.

在Migrate.php的handle()方法中

$this->createIndex($aliasName, $indexClass);
                $this->info('创建成功,准备初始化数据');
                $indexClass::rebuild($aliasName);

此处为何不写为:

$indexClass::rebuild($aliasName.'_0');

如果更新新建的索引失败,那么重建索引是否也会跟着失败,因为:

if (!preg_match('~_(\d+)$~', $indexName, $m)) {
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
leo
最佳答案

你先搞明白 $indexClass 指向的是哪个类

5年前 评论
讨论数量: 4
leo

你先搞明白 $indexClass 指向的是哪个类

5年前 评论

@leo 老师,我认为$indexClass指的是Indices\ProjectIndex::class这个类
此处写$indexClass::rebuild($aliasName);相当于执行
Artisan::call('es:sync-products', ['--index' => $aliasName]);把商品同步到elasticsearch
但是在recreateIndex()方法中用的却是:
$this->info('创建成功,准备重建数据');
$indexClass::rebuild($newIndexName);
$this->info('重建成功,准备修改别名');
为什么这里不用别名($aliasName)呢?

5年前 评论
leo

@uasemax 此时别名仍然指向旧索引,而我们的目的是要往新索引中同步全量数据,因此我们需要把新索引的名称传递给 es:sync-products 命令。

5年前 评论

@leo 多谢老师指导,在下明白了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!