Referência de definição de índice do Cloud Firestore

O Cloud Firestore cria índices automaticamente para oferecer suporte aos tipos de consultas mais comuns, mas permite que você defina índices personalizados e substituições de índice, conforme descrito nos guias do Cloud Firestore.

É possível criar, modificar e implantar índices personalizados no Console do Firebase ou usando a CLI. Na CLI, edite o arquivo de configuração de índice com o nome de arquivo padrão firestore.indexes.json e implante usando o comando firebase deploy.

É possível exportar índices com a CLI usando firebase firestore:indexes.

Um arquivo de configuração de índice define um objeto que contém uma matriz indexes e uma matriz fieldOverrides opcional. Veja um exemplo:

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

Implantar uma configuração de índice

Implante a configuração do índice com o comando firebase deploy. Se você quiser implantar índices apenas nos bancos de dados configurados no projeto, adicione a sinalização --only firestore. Consulte a referência de opções deste comando.

Para listar os índices implantados, execute o comando firebase firestore:indexes. Adicione a flag --database=<databaseID> para listar índices de um banco de dados diferente do padrão do projeto.

Se você fizer edições nos índices usando o Console do Firebase, atualize também o arquivo de índices local. Para saber mais sobre como gerenciar índices, consulte os guias do Cloud Firestore.

Formato JSON

Índices

O esquema para um objeto na matriz indexes é o seguinte. As propriedades opcionais são identificadas pelo caractere ?.

Os campos do documento do Cloud Firestore só podem ser indexados em um modo. Assim, um objeto de campo só pode conter uma das propriedades 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

O esquema para um objeto na matriz fieldOverrides é o seguinte. As propriedades opcionais são identificadas pelo caractere ?.

Os campos de documento do Cloud Firestore só podem ser indexados em um modo. Assim, um objeto de campo não pode conter as propriedades order e 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

Uma política de TTL pode ser ativada ou desativada usando a matriz fieldOverrides da seguinte maneira:

  // 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 manter a indexação padrão no campo e ativar uma política de TTL:

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

Para mais informações sobre as políticas de time to live (TTL), consulte a documentação oficial.