elasticsearch - 对elasticsearch索引采取什么措施会导致旧索引数据不起作用并需要重新索引?
问题描述
我在 ES 官方文档中找不到信息。我用谷歌搜索这个问题并得到一些可能不正确的结论。如下操作将导致旧索引数据无法工作,需要重新索引。
- 更改文档字段的类型
- 重命名文档的字段名称
- 更改索引设置,例如分片号和副本号
- 更改文档字段的分析器
我们可以对索引执行许多操作。就像添加字段、添加分析器和另一个映射参数一样。是否有任何权威文件可以告诉我什么操作导致旧索引数据不起作用并需要重新索引。
解决方案
这是一个非常好的问题,我同意没有适当的官方文档来解释某些操作需要重新索引数据或创建新索引的所有用例,部分原因可能是其中一些是显而易见和常见的,而有些是由于缺乏良好的文档,并且在 Stackoverflow、弹性讨论论坛等不同的论坛上有答案。
无论如何,让我尝试为您的结论添加解释,这在您列出的大多数情况下都是正确的:
- 更改文档字段的类型
是的,因为 Elasticsearch 以不同的方式索引/存储不同类型的字段,这要求keyword
字段不经过分析过程,而text
字段通过标准分析器。将其视为RDBMS 的 DDL
- 重命名文档的字段名称
同样,您正在更改字段名称,因此需要重建索引以反映更改,否则您的索引和搜索请求将不起作用,这又是数据定义类型的更改。
- 更改索引设置,例如分片和副本号
这并不完全正确,分片有两种类型(主分片和副本分片),更改主分片需要建立新索引,而副本分片可以动态更改(增加/减少)。但是,如果您想以零停机时间更改主分片,则可以使用此官方链接中提到的别名方法来执行此操作,不允许更改主分片的原因是基于此您的数据被划分和存储,如果您改变这一点,您必须再次重新排列数据并更改您的哈希/路由机制以了解哪个分片保存数据,而副本分片只是您可以一直增加/减少的副本。
- 更改文档字段的分析器
同样,由于分析器控制如何为您的字段创建标记,因此更改这意味着您必须再次重新索引以根据 ES 倒排索引中的新分析器反映正确的标记。
推荐阅读
- haskell - Haskell“堆栈”如何与 Windows 上的“msys2”交互?
- javascript - 如何从 Firefox 中捕获选择的已保存用户名密码
- windows - 尝试在窗口上进行 pip 安装时访问被拒绝 - 没有管理员权限
- c++ - 有没有办法在远程设备上打开和编辑 Visual Studio 2017 解决方案?
- c - 在c中检索Windows符号链接目标
- javascript - 如何登录 ReactJs?
- javascript - 如何在 React Navigation (4.x) 的特定屏幕中隐藏 BottomTabNavigator
- android - 在 Android Q 从内容 uri 打开 pdf 查看器
- c# - 如何构建中间包含 RTL(Hebrew) 单词的字符串?
- visual-studio - Visual Studio 2019 的 Web 编译器中的 LESS 停止工作