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 個文件欄位只能在一種模式中編入索引,
因此,欄位物件只能包含一個 order
、arrayConfig
和
vectorConfig
屬性。
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 個文件欄位只能在一種模式中編入索引,
因此,欄位物件不能同時包含 order
和 arrayConfig
資源。
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) 政策,請參閱官方說明文件。