【问题标题】:Firestore permutation explosion of composite index复合索引的Firestore排列爆炸
【发布时间】:2020-02-04 19:45:55
【问题描述】:

我卡在 Firestore 的复合索引中。我在一个用户下有几个字段,例如 A(string)、B(string)、C(string)、D(array)、E(array)、F(array)、G(array)。可以通过这些字段的不同组合来搜索和查询用户。例如,“A == 'Male', B == '2020'”,它告诉我创建复合索引,在我创建查询后,如“A == 'Male', B == '2020', C = = "Ontario'" 仍然需要一个新的复合索引。

  1. 我想知道的是,我是否必须创建复合索引的所有排列?
  2. 数组字段多于两个,但SDK 只允许一个“array-contains”子句。我能为此做些什么?为此,我尝试将数组 [element1,element2] 拆分为类似“element1 : true, element2 : true”的结构,可以通过“==”子句查询。但问题是数组是动态的,每次我附加一个“==”子句时,SDK 都会告诉我需要创建一个新的复合索引。

有人对此有任何想法吗?

【问题讨论】:

    标签: google-cloud-firestore


    【解决方案1】:

    没有工具可以自动创建所有所需的组合。但是,documentation 建议您可以使用Firebase CLI 来部署使用其 JSON 配置定义的索引。此配置文件未记录在案,因此您必须根据手动创建的索引对其进行逆向工程。一种此类索引配置的示例是here。您可以手动创建一个索引,然后运行firebase init,选择 Firestore,它会将索引转储到其 JSON 配置中,您可以对其进行编辑和重新部署。从今天开始,您必须在新文件夹中运行 firebase init 才能从服务器获取新索引。

    一旦您知道如何像这样部署索引,您就可以编写代码来创建该 JSON 配置中的所有索引组合。不漂亮,但可行。

    【讨论】:

    • 谢谢,我会试试的。我刚刚更新了我的问题,你能看看吗?
    • 仅供参考,它违反堆栈溢出约定来改变问题的性质,尤其是在它已经得到回答之后。它使答案无效,并可能使可能看到它的其他人感到困惑。我建议还原更改,并将您的新问题作为单独的问题发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多