Referencia de la definición de índice de Cloud Firestore

Cloud Firestore crea automáticamente índices para admitir los eventos más comunes tipos de consultas, pero te permite definir índices personalizados y anulaciones de índices como se describe en las guías de Cloud Firestore.

Puedes crear, modificar e implementar índices personalizados en Firebase console. con la CLI. Desde la CLI, edita tu archivo de configuración de índices con el nombre de archivo predeterminado firestore.indexes.json y, luego, implementarlo con el comando firebase deploy.

Puedes exportar índices con la CLI mediante firebase firestore:indexes.

Un archivo de configuración de índices define un objeto que contiene un Array indexes y un array opcional fieldOverrides. Por ejemplo:

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

Implementa una configuración de índices

Implementa la configuración de tu índice con el comando firebase deploy. Si solo quieres implementar índices para las bases de datos configuradas en tu proyecto, agrega la marca --only firestore. Consulta la referencia de opciones para este comando.

Para enumerar los índices implementados, ejecuta el comando firebase firestore:indexes. Agrega el La marca --database=<databaseID> para enumerar los índices de una base de datos que no sea la tuya la base de datos predeterminada del proyecto.

Si editas los índices con Firebase console, asegúrate también de actualiza tu archivo de índices local. Para obtener más información sobre la administración de índices, consulta el Guías de Cloud Firestore.

Formato JSON

Índices

El esquema de un objeto en el array indexes es el siguiente. Opcional se identifican con el carácter ?.

Ten en cuenta que los campos del documento Cloud Firestore solo se pueden indexar en un modo, por lo tanto, un objeto de campo solo puede contener una de las siguientes propiedades: order, arrayConfig y 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

Anulaciones de campo

El esquema de un objeto en el array fieldOverrides es el siguiente. Opcional se identifican con el carácter ?.

Ten en cuenta que los campos del documento Cloud Firestore solo se pueden indexar en un modo, Por lo tanto, un objeto de campo no puede contener tanto order como arrayConfig propiedades.

  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

Política de TTL

Se puede habilitar o inhabilitar una política de TTL con el array fieldOverrides de la siguiente manera:

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

Para mantener la indexación predeterminada en el campo y habilitar una política de TTL, haz lo siguiente:

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

Para obtener más información sobre las políticas de tiempo de actividad (TTL), consulta la documentación oficial.