通過錯誤消息創建缺失索引
如果您嘗試使用未映射到現有索引的範圍子句進行複合查詢,則會收到錯誤消息。錯誤消息包含在 Firebase 控制台中創建缺失索引的直接鏈接。
按照生成的指向 Firebase 控制台的鏈接,查看自動填充的信息,然後單擊Create 。
使用 Firebase 控制台
要從 Firebase 控制台手動創建新索引:
- 轉到Firebase 控制台的Cloud Firestore部分。
- 轉到索引選項卡並單擊添加索引。
- 輸入集合名稱並設置您要為索引排序的字段。
- 單擊創建。
建立索引可能需要幾分鐘時間,具體取決於查詢的大小。創建它們後,您可以在綜合索引部分查看您的索引及其狀態。如果他們仍在構建,Firebase 控制台會包含一個構建狀態欄。
刪除索引
要刪除索引:
- 轉到Firebase 控制台的Cloud Firestore部分。
- 單擊索引選項卡。
- 將鼠標懸停在要刪除的索引上,然後從上下文菜單中選擇刪除。
- 通過單擊警報中的刪除來確認您要刪除它。
使用 Firebase CLI
您還可以使用Firebase CLI部署索引。首先,在您的項目目錄中運行firebase init firestore
。在設置期間,Firebase CLI 會生成一個 JSON 文件,其中包含正確格式的默認索引。編輯文件以添加更多索引並使用firebase deploy
命令進行部署。如果您只想部署索引,請添加--only firestore:indexes
標誌。如果您使用 Firebase 控制台對索引進行編輯,請確保您還更新了本地索引文件。請參閱JSON 索引定義參考。
索引構建時間
要構建索引,Cloud Firestore 必須設置索引,然後用現有數據回填索引。索引構建時間是設置時間和回填時間的總和:
設置索引需要幾分鐘時間。索引的最短構建時間是幾分鐘,即使是空數據庫也是如此。
回填時間取決於有多少現有數據屬於新索引。與索引定義匹配的字段值越多,回填索引所需的時間就越長。
索引構建是長期運行的操作。
在您開始構建索引後,Cloud Firestore 會為操作分配一個唯一名稱。操作名稱以projects/[PROJECT_ID]/databases/(default)/operations/
為前綴,例如:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
但是,您可以在為describe
命令指定操作名稱時省略前綴。
列出所有長時間運行的操作
要列出長時間運行的操作,請使用gcloud firestore operations list命令。此命令列出正在進行的和最近完成的操作。完成後幾天列出的操作:
gcloud firestore operations list
檢查運行狀態
您可以列出單個操作的詳細信息,而不是列出所有長時間運行的操作:
gcloud firestore operations describe operation-name
估計完成時間
當您的操作運行時,請查看state
字段的值以了解操作的整體狀態。
對長時間運行操作狀態的請求還會返回指標workEstimated
和workCompleted
。這些指標是針對文檔數量返回的。 workEstimated
顯示操作將處理的估計文檔總數。 workCompleted
顯示到目前為止已處理的文檔數。操作完成後, workCompleted
反映了實際處理的文檔總數,這可能與workEstimated
的值不同。
workCompleted
除以workEstimated
以獲得粗略的進度估計。估計可能不准確,因為它取決於延遲的統計信息收集。
例如,這裡是索引構建的進度狀態:
{ "operations": [ { "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI", "metadata": { "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata", "common": { "operationType": "CREATE_INDEX", "startTime": "2020-06-23T16:52:25.697539Z", "state": "PROCESSING" }, "progressDocuments": { "workCompleted": "219327", "workEstimated": "2198182" } }, }, ...
操作完成後,操作描述將包含"done": true
。查看state
字段的值以了解操作的結果。如果響應中未設置done
字段,則其值為false
。不要依賴進行中操作的done
值的存在。
索引構建錯誤
在管理複合索引和單字段索引豁免時,您可能會遇到索引構建錯誤。如果 Cloud Firestore 的索引數據遇到問題,索引操作可能會失敗。最常見的是,這意味著您達到了索引限制。例如,該操作可能已達到每個文檔的最大索引條目數。
如果索引創建失敗,您會在控制台中看到錯誤消息。在您確認您沒有達到任何索引限制後,請重試您的索引操作。