适用版本: 7.12-8.9
1. 错误异常的基本描述 #
index [indexName] not found in repository [repoName] 表示当前请求需要从快照仓库中解析某个索引,但仓库元数据里不存在该索引记录。它常见于恢复指定索引、分析快照内容、按索引过滤恢复对象时。
常见现象 #
- 恢复接口指定了某个索引名,但请求立即失败。
- 同一个快照可以列出来,但其中某些索引名无法恢复。
- 使用别名、旧索引名或重命名后的名称进行恢复,结果报错。
典型报错与异常栈 #
index [orders-2024.11] not found in repository [prod-backup]
org.elasticsearch.index.IndexNotFoundException
2. 为什么会发生这个错误 #
这个异常通常不是在线集群缺索引,而是“仓库中的快照内容”里没有这个索引。常见原因有:
- 恢复请求写错了索引名,尤其是按日期滚动命名的索引。
- 该快照创建时并未包含这个索引,例如快照时使用了过滤条件。
- 当前引用的是另一份快照或另一座仓库,而不是你以为的那一份。
- 仓库元数据存在不一致,导致快照可见但其中索引条目丢失。
3. 如何排查和解决这个异常和解决这个异常 #
- 先查看目标快照的详细内容:
GET /_snapshot/prod-backup/daily-es-2024.12.01
- 确认返回结果中的
indices列表是否真的包含目标索引。 - 如果你是通过通配符或脚本构造索引名,检查实际展开后的值。
- 如果业务方传入的是别名,先解析别名对应的真实索引,再判断快照里是否存在。
- 若快照内容看起来异常,继续核查仓库是否被手工迁移、覆盖,或是否曾出现仓库元数据损坏。
排查时需要注意的问题 #
- 线上集群存在该索引,不等于某个历史快照里也一定有它。
- 恢复时的
rename_pattern和rename_replacement是恢复后的命名规则,不影响仓库中原始索引是否存在。 - 对象存储目录里看到索引相关 blob,不代表该索引在快照元数据里可恢复。
4. 如何解决这个错误 #
常用修复思路 #
- 如果索引名写错,修正恢复请求即可。
- 如果快照本身未包含目标索引,只能选择包含该索引的其他快照,或重新创建快照。
- 如果调用端使用别名或业务逻辑名,增加一层名称映射校验,避免直接把应用层名称传给恢复接口。
- 如果怀疑仓库元数据异常,先只读挂载仓库,验证
RepositoryData与快照明细是否一致,再考虑重建引用。
相关 Elasticsearch API #
GET /_snapshot/{repository}/{snapshot}:查看某个快照包含哪些索引。POST /_snapshot/{repository}/{snapshot}/_restore:执行恢复时可指定indices。GET /_cat/indices?v:对比线上真实索引与快照历史索引的差异。
借助 INFINI 产品提升排障效率 #
- INFINI Console 可对比当前索引资产、快照任务与历史恢复请求。
- INFINI Gateway 适合定位是哪一个调用方频繁传错索引名。
5. 小结 #
index [indexName] not found in repository [repoName] 的本质是“请求要恢复的索引不在该仓库快照元数据里”。优先校对快照内容和请求参数,再考虑仓库元数据问题,排查会更直接。
相关错误 #
- snapshot [snapName] not found in repository [repoName]:请求的快照本身就不存在
- failed to get snapshot info:快照记录存在,但快照明细读取失败
- Unexpected exception when loading repository data:仓库元数据加载阶段已异常
- start object expected index metadata identifiers:索引元数据结构本身已无法正常解析
- cannot restore index [index] because it cannot be upgraded:索引在快照里存在,但版本上无法被目标集群接收
附:日志上下文 #
throw new IndexNotFoundException("index [" + indexName + "] not found in repository [" + repositoryName + "]");





