Riferimento per le definizioni dell'indice di Cloud Firestore

Cloud Firestore crea automaticamente indici per supportare i tipi di query più comuni, ma consente di definire indici personalizzati e override degli indici come descritto nelle guide di Cloud Firestore.

Puoi creare, modificare ed eseguire il deployment di indici personalizzati nella console Firebase o utilizzando l'interfaccia a riga di comando. Nell'interfaccia a riga di comando, modifica il file di configurazione dell'indice con il nome file predefinito firestore.indexes.json ed esegui il deployment utilizzando il comando firebase deploy.

Puoi esportare gli indici con l'interfaccia a riga di comando utilizzando firebase firestore:indexes.

Un file di configurazione degli indici definisce un oggetto contenente un array indexes e un array fieldOverrides facoltativo. Esempio:

{
  // 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: []
    }
  ]
}

Esegui il deployment di una configurazione indice

Esegui il deployment della configurazione dell'indice con il comando firebase deploy. Se vuoi eseguire il deployment solo degli indici per i database configurati nel tuo progetto, aggiungi il flag --only firestore. Vedi la documentazione di riferimento sulle opzioni per questo comando.

Per elencare gli indici di cui è stato eseguito il deployment, esegui il comando firebase firestore:indexes. Aggiungi il flag --database=<databaseID> per elencare gli indici di un database diverso da quello predefinito del progetto.

Se apporti modifiche agli indici utilizzando la console Firebase, assicurati di aggiornare anche il file indici locali. Per ulteriori informazioni sulla gestione degli indici, consulta le guide di Cloud Firestore.

Formato JSON

Indici

Lo schema per un oggetto nell'array indexes è il seguente. Le proprietà facoltative sono identificate con il carattere ?.

Tieni presente che i campi documento di Cloud Firestore possono essere indicizzati solo in una modalità, quindi un oggetto campo può contenere solo una delle proprietà order, arrayConfig e 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

Lo schema per un oggetto nell'array fieldOverrides è il seguente. Le proprietà facoltative sono identificate con il carattere ?.

Tieni presente che i campi documento di Cloud Firestore possono essere indicizzati solo in una modalità, quindi un oggetto campo non può contenere sia le proprietà order che 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

Criterio TTL

Un criterio TTL può essere attivato o disattivato utilizzando l'array fieldOverrides, come indicato di seguito:

  // 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: []
    }
  ]

Per mantenere l'indicizzazione predefinita in campo e attivare un criterio TTL:

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

Per ulteriori informazioni sui criteri di durata (TTL) consulta la documentazione ufficiale.