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

Cloud Firestore crea índices automáticamente para admitir los tipos de consultas más comunes, 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 o con la CLI. Desde la CLI, edita el archivo de configuración de índices, con el nombre de archivo predeterminado firestore.indexes.json, y, luego, impleméntalo con el comando firebase deploy.

Puedes exportar índices con la CLI a través de 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 deseas 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 mostrar una lista de los índices implementados, ejecuta el comando firebase firestore:indexes. Agrega la marca --database=<databaseID> a la lista de índices de una base de datos que no sea la predeterminada de tu proyecto.

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

Formato JSON

Índices

El esquema para un objeto del array indexes es el siguiente. Las propiedades opcionales se identifican con el carácter ?.

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

FieldOverrides

El esquema para un objeto del array fieldOverrides es el siguiente. Las propiedades opcionales se identifican con el carácter ?.

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

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.