Gerenciar índices da edição Enterprise


O comportamento de indexação depende da edição do banco de dados. Nesta página, descrevemos como gerenciar seus índices para a edição Enterprise do Firestore. Para a edição Standard do Firestore, consulte Visão geral do índice da edição Standard do Firestore.

Para saber mais sobre os índices da edição Enterprise do Firestore, consulte Visão geral dos índices.

Antes de começar

Antes de criar um índice no Firestore, verifique se você tem um dos seguintes papéis atribuídos:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

Para conceder um papel, consulte Conceder um único papel. Para mais informações sobre os papéis do Firestore e as permissões associadas, consulte Papéis predefinidos.

Se você tiver definido papéis personalizados, atribua todas as permissões a seguir para criar índices:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

Criar um índice

Para criar um índice, siga estas etapas:

Google Cloud Console do
  1. No Google Cloud console do, acesse a página Bancos de dados.

    Acessar "Bancos de dados"

  2. Selecione um banco de dados na lista.
  3. No menu de navegação, clique em Índices.
  4. Clique em Criar índice.
  5. Insira um ID de coleção.
  6. Adicione um ou mais caminhos de campo e selecione uma opção de índice para cada um.
  7. Selecione uma opção de presença de campo, esparsa ou não esparsa.
  8. Opcional: defina a opção de índice exclusivo.
  9. Clique em Criar.
  10. O novo índice é mostrado na lista de índices, e o Firestore começa a criar o índice. Quando o processo de criação terminar, você verá uma marca de seleção verde próxima ao índice. Se o índice não for criado, consulte Erros na criação do índice para descobrir as possíveis causas.
CLI gcloud

Para criar um índice, use o gcloud firestore indexes composite create comando.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense

Substitua:

  • DATABASE_ID: um ID do banco de dados.
  • COLLECTION: um nome de coleção.
  • FIELD_CONFIGURATION: uma configuração de campo. Para cada campo, adicione --field-config=field-path=. Exemplo:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    Para mais informações sobre como configurar esses campos, consulte --field-config.

Para criar um índice esparso, defina --density=sparse-any.

Para criar um índice de várias chaves, adicione a sinalização --unique.

Terraform

Use o recurso google_firestore_index.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

Substitua:

  • DATABASE_ID: o ID do banco de dados escolhido.
  • COLLECTION: o nome da coleção a ser indexada.
  • FIELD_PATH: o nome do campo a ser indexado
  • ORDER: um de ASCENDING ou DESCENDING
  • DENSITY: um de SPARSE_ANY ou DENSE

Criar um índice de texto

Use o Google Cloud console do para criar um índice de texto.

  1. No Google Cloud console, acesse a página Bancos de dados.

    Acessar "Bancos de dados"

  2. Selecione um banco de dados na lista.

  3. No menu de navegação, clique em Índices.

  4. Opcional: insira um nome para o índice.

  5. Acesse Tipo de pesquisa e selecione Texto.

  6. Insira um ID de coleção.

  7. Configure um ou mais campos para indexar.

  8. Defina o escopo da consulta para o índice.

  9. Selecione um idioma padrão.

  10. Opcional: defina um caminho de substituição de idioma para um nome de campo que contenha a configuração de idioma de um documento.

  11. Clique em Criar.

  12. O novo índice é mostrado na lista de índices, e o Firestore começa a criar o índice. Quando o índice é criado, uma marca de seleção verde aparece ao lado dele.

Criar um índice geoespacial

Use o Google Cloud console para criar um índice geoespacial.

  1. No Google Cloud console, acesse a página Bancos de dados.

    Acessar "Bancos de dados"

  2. Selecione um banco de dados na lista.

  3. No menu de navegação, clique em Índices.

  4. Opcional: insira um nome para o índice.

  5. Acesse Tipo de pesquisa e selecione Geo (2dsphere).

  6. Insira um ID de coleção.

  7. Configure um ou mais campos para indexar.

  8. Defina o escopo da consulta para o índice.

  9. Clique em Criar.

    O novo índice é mostrado na lista de índices, e o Firestore começa a criar o índice. Quando o índice é criado, uma marca de seleção verde aparece ao lado dele.

Excluir um índice

Para excluir um índice, siga estas etapas:

Google Cloud Console do
  1. No Google Cloud console do, acesse a página Bancos de dados.

    Acessar "Bancos de dados"

  2. Na lista, selecione um banco de dados.
  3. No menu de navegação, clique em Índices.
  4. Na lista de índices, escolha Excluir no botão Mais do índice que você quer excluir.
  5. Clique em Excluir índice.
CLI gcloud
  1. Para encontrar o nome do índice, use o gcloud firestore indexes composite list comando.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    Substitua DATABASE_ID pelo ID do banco de dados.

  2. Para excluir o índice, use o comando gcloud firestore indexes composite delete.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    Substitua:

    • INDEX_NAME: o nome de um índice
    • DATABASE_ID: um ID do banco de dados.

Tempo de build do índice

Para criar um índice, o Firestore precisa criar o índice e, em seguida, preencher as entradas do índice com os dados atuais. O tempo necessário para criar um índice é determinado pelo seguinte:

  • O tempo de build mínimo de um índice é de alguns minutos, mesmo para um banco de dados vazio.

  • O tempo necessário para fazer o preenchimento das entradas de índice depende da quantidade de dados existentes que pertencem ao novo índice. Quanto mais valores de campo corresponderem à definição do índice, mais demorado será o preenchimento.

Gerenciar operações de longa duração

As versões de índice são operações de longa duração. As seções a seguir descrevem como trabalhar com operações de longa duração para índices.

Depois que você começa a criar um índice, o Firestore atribui um nome exclusivo à operação. Os nomes das operações são prefixados com projects/PROJECT_ID/databases/DATABASE_ID/operations/, por exemplo:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

É possível omitir o prefixo ao especificar um nome de operação para o comando describe.

Listar todas as operações de longa duração

Para listar operações de longa duração, use o comando gcloud firestore operations list. Esse comando lista as operações contínuas e as concluídas recentemente. As operações são listadas por alguns dias após a conclusão:

gcloud firestore operations list

Verificar o status da operação

Em vez de listar todas as operações de longa duração, é possível listar os detalhes de uma única operação:

gcloud firestore operations describe operation-name

Como estimar o tempo de conclusão

Conforme sua operação é executada, consulte o valor do campo state para o status geral da operação.

Uma solicitação para o status de uma operação de longa duração também retorna as métricas workEstimated e workCompleted. workEstimated mostra o número total estimado de documentos que uma operação processará. workCompleted mostra o número de documentos processados até o momento. Após a conclusão da operação, workCompleted reflete o número total de documentos que foram realmente processados, o que pode ser diferente do valor de workEstimated.

Para estimar o progresso de uma operação, divida workCompleted por workEstimated.

Confira um exemplo do progresso da criação de um índice:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Quando uma operação for concluída, a descrição da operação vai conter "done": true. Veja o valor do campo state para o resultado da operação. Se o campo done não estiver definido na resposta, isso significa que a operação não foi concluída.