7.7. Elasticsearch 索引结构迁移(Migration)

本教程最新版为 8.x,当前版本已放弃维护,请阅读最新版本!

索引结构迁移

在前面的章节我们已经完成了 Elasticsearch 相关的业务功能开发,在之前的开发过程中如果有涉及到商品索引的变更,我们都是通过手动调用 Elasticsearch 的接口完成的,这就如同 Mysql 的数据库结构变更都是由运维或者开发人员在代码上线时通过手动执行 SQL 来完成,这里会有两个问题:

  1. 在做某些变更时需要先关闭索引,完成变更之后再打开,需要执行很多次命令,操作起来比较麻烦;
  2. 索引的字段只能添加而不能修改,比如可以给 nested 类型的字段添加新的子字段,而 integer 类型的字段则无法被修改为 string 类型。

对于问题一我们可以通过写脚本的来避免手工操作的麻烦,但还是需要每次都编写对应的升级脚本;而问题二就更严重,需要删除掉旧的索引,根据新的结构创建新索引,然后还需要重新添加数据到索引中,可能会有较长的不可用时间。

1. 别名

在介绍解决方案之前,我们需要先了解一下 Elasticsearch 中『别名』的概念。

在 Elasticsearch 中可以给索引指定一个『别名』,对别名的所有操作都会映射到该别名所对应的索引。同时 Elasticsearch 也允许我们修改一个已存在的『别名』,...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

张汉为
PHP artisan es:migrate 没反应?
0 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
uasemax
老师,有一处地方让我很疑惑.
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.7
清风知我意
Elasticsearch 迁移报错
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
d1270469522
如果别名本身就是一个索引,报错!
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.8
dusty
6.0 版本 ES Migrate 报错
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.8
SZL_
这里出现了一个很奇怪的问题
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.8
finding
更新索引只更新索引结构,不重建数据?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
断桥红颜V
运行 `php artisan es:migrate` 后出现错误?
0 个点赞 | 1 个回复 | 问答 | 课程版本 6.x
AkinoMushi
更新已有索引后为什么不需要重建数据
0 个点赞 | 1 个回复 | 问答 | 课程版本 7.x
AmberLavigne
暂时关闭索引后,是否会出现短暂的无法请求的情况出现?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Flourishing
老师,命名空间这里我有点忘记了,麻烦老师看我理解的对不?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
kobe6
删除 products 索引时候报错
0 个点赞 | 0 个回复 | 分享 | 课程版本 5.5