如何为 Firestore 中的不同字段组合创建索引?

Yul*_*ian 5 firebase firebase-security google-cloud-firestore

假设我有一个users要在我的页面中过滤的集合。要过滤的字段是nameagelocation

为此,我创建了一个复合索引(名称、年龄、位置)。问题是我希望有机会按 3 项的任意组合进行过滤 - 姓名和年龄、姓名和位置、年龄和位置。当我尝试这样做时,系统会提示我为使用的字段组合创建另一个复合索引。

我的问题是 - 这是否意味着我必须为所有可能的复合组合添加索引?如果是,如果我想潜在地过滤 10 个字段,而不仅仅是 3 个字段,我该如何实现这一点?我是否必须自己为所有组合创建索引?

Niy*_*yas 6

如果您在查询中使用多个等式 (==) 子句,则可以利用索引合并。Cloud Firestore 可以重复使用现有索引。在您的例子中,您有 3 列名称、年龄和位置,并且您想按心排序,然后创建三个索引,如下所示:

\n\n
Collection   Fields indexed\nusers        \xe2\x86\x91 name,      \xe2\x86\x91 hearts\nusers        \xe2\x86\x91 age,       \xe2\x86\x91 hearts\nusers        \xe2\x86\x91 location,  \xe2\x86\x91 hearts\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,您可以使用多个等式 (==) 子句创建结合姓名、年龄和位置的不同查询。

\n\n

您可以在此处参考关于索引合并的Firestore文档

\n

  • 有关索引合并的文档的直接链接:https://firebase.google.com/docs/firestore/query-data/index-overview#take_advantage_of_index_merging (2认同)

Dou*_*son 4

是的,您必须自己创建每个组合。最简单的方法可能是使用Firebase CLI根据您创建和管理(并可能存储在源代码管理中)的 JSON 文件来部署索引。您甚至可以编写一些代码来生成此文件,这样您就不必手动创建每个组合。

  • 您将为它们占用的空间付费。而且您最多只能购买 200 个。https://firebase.google.com/docs/firestore/quotas#indexes (3认同)