Swift/XCode对接Firestore时索引缺失报错无创建链接如何解决
解决方案
1. 先提取完整错误信息确认链接是否存在
你当前拿到的no matching index found只是错误的简短描述,Firebase SDK返回的完整索引创建链接默认存储在NSError的userInfo字段中,你可以将错误对象的完整信息打印出来排查:
if let err = err as NSError? { print("完整错误信息:\(err.userInfo)") // 通常索引链接会存在于NSLocalizedFailureReasonErrorKey对应的value中 if let failReason = err.userInfo[NSLocalizedFailureReasonErrorKey] as? String { print("错误详情:\(failReason)") } return completion(err) }
绝大多数情况下链接没有消失,只是你没有打印完整的错误字段。如果确认完整错误里确实没有链接,再用下面的方案。
2. 用Firebase CLI批量自动生成并部署索引
这是最高效的方案,无需逐个手动创建索引:
- 首先本地安装Firebase CLI,登陆你的项目账号
- 在本地运行应用的全量业务流程,把所有用到Firestore查询的路径都触发一遍
- 执行命令
firebase firestore:indexes:extract,工具会自动从所有请求记录里提取需要的复合索引,生成本地配置文件firestore.indexes.json - 执行命令
firebase deploy --only firestore:indexes,即可批量上传所有索引到Firebase控制台自动创建,无需手动操作
3. 按查询规则手动批量创建索引
如果不想使用CLI工具,可以根据你的查询逻辑统一梳理需要的索引规则:
Firestore复合索引的规则为:先加所有等值筛选的字段(顺序不影响),再加所有排序/范围筛选的字段(顺序要和查询里的顺序一致)。
以你提供的示例代码为例:
- 等值筛选字段:
some_object.user_id - 排序字段:
created_time
你只需要在控制台对应集合下,按上述字段顺序创建复合索引即可。
额外说明:报错无链接的常见原因
- 你使用的Firebase iOS SDK版本更新后,错误的默认简短描述隐藏了链接字段
- 你当前应用绑定的Firebase服务账号没有索引创建权限,系统不会返回创建链接
- 你删除旧索引后触发了项目的索引缓存问题,等待10-15分钟再测试即可恢复链接返回
内容的提问来源于stack exchange,提问作者timberlakegregg
相关产品推荐
相关产品推荐

