Cloud Firestore 索引定義參考資料

Cloud Firestore 會自動建立索引,支援最常見的 但能讓您定義自訂索引及覆寫索引 (詳見 Cloud Firestore 指南)。

您可以在 Firebase 控制台建立、修改及部署自訂索引,或是 建立 Deployment在 CLI 中編輯索引設定檔: 名為 firestore.indexes.json 的預設檔案名稱,然後使用 firebase deploy 指令部署檔案。

您可以使用 firebase firestore:indexes 透過 CLI 匯出索引。

索引設定檔會定義一個包含 indexes 陣列和選用的 fieldOverrides 陣列。 範例如下:

{
  // Required, specify compound and vector indexes
  indexes: [
    {
      collectionGroup: "posts",
      queryScope: "COLLECTION",
      fields: [
        { fieldPath: "author", arrayConfig: "CONTAINS" },
        { fieldPath: "timestamp", order: "DESCENDING" }
      ]
    },
    {
      collectionGroup: "coffee-beans",
      queryScope: "COLLECTION",
      fields: [
        {
          fieldPath: "embedding_field",
          vectorConfig: { dimension: 256, flat: {} }
        }
      ]
    }
  ],

  // Optional, disable indexes or enable single-field collection group indexes
  fieldOverrides: [
    {
      collectionGroup: "posts",
      fieldPath: "myBigMapField",
      // We want to disable indexing on our big map field, and so empty the indexes array
      indexes: []
    }
  ]
}

部署索引設定

使用 firebase deploy 指令部署索引設定。如果您只有 如果您想為專案中已設定的資料庫部署索引,請將 --only firestore 旗標。請參閱這個指令的選項參考資料

如要列出已部署的索引,請執行 firebase firestore:indexes 指令。將 --database=<databaseID> 旗標,列出非資料庫的索引 專案的預設資料庫

透過 Firebase 控制台編輯索引時,也請務必 更新本機索引檔案。如要進一步瞭解如何管理索引,請參閱 Cloud Firestore 指南

JSON 格式

索引

indexes 陣列中某個物件的結構定義如下。選用 屬性以 ? 字元表示。

請注意,有 Cloud Firestore 個文件欄位只能在一種模式中編入索引, 因此,欄位物件只能包含一個 orderarrayConfigvectorConfig 屬性。

  collectionGroup: string  // Labeled "Collection ID" in the Firebase console
  queryScope: string       // One of "COLLECTION", "COLLECTION_GROUP"
  fields: array
    fieldPath: string
    order?: string         // One of "ASCENDING", "DESCENDING"; excludes arrayConfig and vectorConfig properties
    arrayConfig?: string   // If this parameter used, must be "CONTAINS"; excludes order and vectorConfig properties
    vectorConfig?: object  // Indicates that this is a vector index; excludes order and arrayConfig properties
      dimension: number    // The resulting index will only include vectors of this dimension
      flat: {}             // Indicates the vector index is a flat index

欄位覆寫

fieldOverrides 陣列中某個物件的結構定義如下。選用 屬性以 ? 字元表示。

請注意,有 Cloud Firestore 個文件欄位只能在一種模式中編入索引, 因此,欄位物件不能同時包含 orderarrayConfig 資源。

  collectionGroup: string  // Labeled "Collection ID" in the Firebase console
  fieldPath: string
  ttl?: boolean            // Set specified field to have TTL policy and be eligible for deletion
  indexes: array           // Use an empty array to disable indexes on this collectionGroup + fieldPath
    queryScope: string     // One of "COLLECTION", "COLLECTION_GROUP"
    order?: string         // One of "ASCENDING", "DESCENDING"; excludes arrayConfig property
    arrayConfig?: string   // If this parameter used, must be "CONTAINS"; excludes order property

存留時間政策

您可以使用 fieldOverrides 陣列啟用或停用存留時間政策,如下所示:

  // Optional, disable index single-field collection group indexes
  fieldOverrides: [
    {
      collectionGroup: "posts",
      fieldPath: "ttlField",
      ttl: "true",  // Explicitly enable TTL on this Field.
      // Disable indexing so empty the indexes array
      indexes: []
    }
  ]

如何保留欄位中的預設索引設定,並啟用存留時間政策:

{
  "fieldOverrides": [
    {
      "collectionGroup": "yourCollectionGroup",
      "fieldPath": "yourFieldPath",
      "ttl": true,
      "indexes": [
        { "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
        { "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
        { "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
      ]
    }
  ]
}

如要進一步瞭解存留時間 (TTL) 政策,請參閱官方說明文件