t3c*_*b0t 6 indexing android kotlin firebase google-cloud-firestore
对于我的收藏之一,我创建了以下索引:
createdOn:时间戳(升序)ordinal:数字(升序)parent:参考(升序)但是,当我运行使用所有三个字段的查询时,firestore 不会获取任何内容,而是建议使用此索引(最后两个字段被交换):
createdOn:时间戳(升序)parent:参考(升序)ordinal:数字(升序)where*我还尝试更改查询中和 的顺序orderBy,但没有任何效果。所以,现在我有两个索引,但不明白为什么其中一个不起作用,而另一个则正常。
为什么我需要不同的索引?文档没有提到它(至少在这里)。
我正在使用的查询是这样的:
private val firestore = FirebaseFirestore.getInstance()
fun texts(languageId: String, storyId: String): Task<QuerySnapshot> {
return firestore
.collection("/languages/$languageId/texts")
.whereIn("createdOn", dates) // <-- List<Timestamp>
.whereEqualTo("parent", firestore.document("/languages/$languageId/stories/$storyId"))
.orderBy("ordinal", Query.Direction.ASCENDING)
.get()
}
Run Code Online (Sandbox Code Playgroud)
正如@MikeG 在评论中提到的,我可以确认,字段的顺序where并不重要,但orderBy字段必须始终是最后一个。最好将索引分为 2 个索引:
createOn(升序)、ordinal(升序)
父级(升序)、序数(升序)
Firestore在查询时会将它们合并在一起,这样可以节省一些成本,并且可以在不同场景下重用索引。
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |