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

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

Você pode 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 nome de arquivo padrão firestore.indexes.json e faça a implantação 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 um 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ê só quiser implantar índices para os bancos de dados configurados em seu projeto, adicionar a sinalização --only firestore. Consulte a referência de opções para este comando.

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

Se você fizer edições nos índices usando o console do Firebase, também atualize o arquivo de índices local. Para saber mais sobre o gerenciamento de índices, consulte a Guias do Cloud Firestore.

Formato JSON

Índices

O esquema de um objeto na matriz indexes é o seguinte. Opcional são identificadas com o caractere ?.

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

Substituições de campo

O esquema de um objeto na matriz fieldOverrides é o seguinte. Opcional são identificadas com o caractere ?.

Os campos de documento Cloud Firestore só podem ser indexados em um modo, Assim, um objeto de campo não pode conter os campos order e arrayConfig propriedades.

  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.