【问题标题】:What are the minimum Firestore indexes needed for multiple fields?多个字段所需的最低 Firestore 索引是多少?
【发布时间】:2020-10-09 17:00:04
【问题描述】:

我记得阅读过有关此内容的文档,但再也找不到该页面了。假设我有一个包含 3 个字段的文档,这些字段都被查询(查询可以是这些字段的任意组合)。

<document>
    identifier: string
    birthday: string
    cluster: [string] // string array

如果我没记错的话,我不需要为每个组合创建单独的索引,例如:

identifier, birthday, cluster
identifier, birthday
identifier, cluster
birthday, cluster

我可以省略其中的一项或多项。但由于我找不到文件,我不知道是否有任何变化。我通常使用调试器控制台生成的链接来创建索引,但我想了解如何手动嵌套它们,尤其是当字段多于 3 个时。那么对于本文档,我必须创建的最小索引是多少?

【问题讨论】:

    标签: google-cloud-firestore


    【解决方案1】:

    您正在寻找的内容称为索引合并,这是一种利用现有复合索引隐式创建更大复合索引的方法。例如,如果您有以下复合索引:

    identifier, birthday
    cluster, birthday
    

    您不需要创建以下复合索引,因为它们单独存在于片段中:

    identifier, birthday, cluster
    

    因此,在您的问题的 4 种可能性中,您只需要最后 3 种(省略第一个索引 identifier, birthday, cluster)...也许。索引很快就会变得不好玩。我之前手动创建了复合索引,并且涵盖了所有组合,但仍然出现复合索引错误。当我打开自动生成链接时,它具有我已经创建的相同复合索引,但字段的顺序不同。当我以不同的顺序手动重新创建复合索引时,查询起作用了。我不知道这种行为是否是故意的,但由于这种古怪的经历,我一直依赖于自动生成复合索引。

    https://cloud.google.com/firestore/docs/concepts/index-overview#taking_advantage_of_index_merging

    【讨论】:

      【解决方案2】:

      但由于找不到文件,不知道有没有变化。

      什么都没有改变。如果您执行查询,并且生成的 QuerySnapshot 中没有文档,那么肯定没有与您的过滤器匹配的文档。

      如果您的查询需要索引for whatever reason,则查询将失败并显示一条错误消息,说明需要创建哪种索引,以及指向控制台的链接以创建它。 查询不会静默失败。

      没有看到数据库中的数据和您的特定查询参数,没有太多可以作为修复的规定。但是如果你没有收到错误,那么你就不需要索引。这里的关键是始终检查和记录查询错误,以便您确定需要发生什么。

      【讨论】:

        猜你喜欢
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        相关资源
        最近更新 更多