מסמך עזר בנושא הגדרת אינדקס של Cloud Firestore

Cloud Firestore יוצר אינדקסים באופן אוטומטי כדי לתמוך בסוגי השאילתות הנפוצים ביותר, אבל מאפשר להגדיר אינדקסים מותאמים אישית ושינוי אינדקסים מותאמים אישית כפי שמתואר במדריכים של Cloud Firestore.

אפשר ליצור, לשנות ולפרוס אינדקסים מותאמים אישית במסוף Firebase או באמצעות ה-CLI. מה-CLI, עורכים את קובץ התצורה של האינדקס עם שם ברירת המחדל firestore.indexes.json, ופורסים אותו באמצעות הפקודה firebase deploy.

אפשר לייצא אינדקסים באמצעות ה-CLI באמצעות firebase firestore:indexes.

קובץ תצורה של אינדקס מגדיר אובייקט אחד שמכיל מערך 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

הסכימה של אובייקט אחד במערך 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

מדיניות TTL

אפשר להפעיל או להשבית מדיניות TTL באמצעות המערך 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: []
    }
  ]

כדי להשאיר את ברירת המחדל של ההוספה לאינדקס בשדה ולהפעיל מדיניות TTL:

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

מידע נוסף על המדיניות בנושא אורך חיים (TTL) זמין במסמכים הרשמיים.