Gérer les index

Cette page explique comment gérer vos index pour l'édition Enterprise de Firestore.

Pour en savoir plus sur les index de l'édition Enterprise de Firestore, consultez la présentation des index.

Avant de commencer

Avant de pouvoir créer un index dans Cloud Firestore, assurez-vous de disposer de l'un des rôles suivants :

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

Pour attribuer un rôle, consultez la section Attribuer un rôle unique. Pour en savoir plus sur les rôles Cloud Firestore et les autorisations associées, consultez la section Rôles prédéfinis.

Si vous avez défini des rôles personnalisés, attribuez toutes les autorisations suivantes pour créer des index :

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

Créer un index

Pour créer un index, procédez comme suit :

Firebase console
  1. Dans la console Firebase, accédez à la page Base de données Firestore.

    Accéder à la base de données Firestore

  2. Sélectionnez une base de données dans la liste.
  3. Dans l'onglet Index, cliquez sur Créer un index.
  4. Saisissez un ID de collection.
  5. Ajoutez un ou plusieurs chemins de champ, puis sélectionnez une option d'index pour chacun d'eux.
  6. Sélectionnez une option de présence de champ : non clairsemé ou clairsemé.
  7. Cliquez sur Créer.
  8. Votre nouvel index s'affiche dans la liste des index et Cloud Firestore commence à le créer. Une fois que votre index est créé, une coche verte apparaît à côté de l'index. Si l'index n'est pas créé, consultez la section Erreurs de création d'index pour connaître les causes possibles.
gcloud CLI

Pour créer un index, utilisez la gcloud firestore indexes composite create commande.

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

Remplacez les éléments suivants :

  • DATABASE_ID : ID de base de données.
  • COLLECTION : nom de collection.
  • FIELD_CONFIGURATION : configuration de champ. Pour chaque champ, ajoutez --field-config=field-path=. Exemple :
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    Pour en savoir plus sur la configuration de ces champs, consultez --field-config.

Pour créer un index clairsemé, définissez --density=sparse-any.

Pour créer un index unique, ajoutez l'indicateur --unique.

Terraform

Utilisez la google_firestore_index ressource.

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"
}

Remplacez les éléments suivants :

  • DATABASE_ID : ID de base de données pour la base de données choisie.
  • COLLECTION : nom de la collection à indexer.
  • FIELD_PATH : nom du champ à indexer.
  • ORDER : ASCENDING ou DESCENDING.
  • DENSITY : SPARSE_ANY ou DENSE.

Créer un index de texte

Utilisez la console Google Cloud pour créer un index de texte.

  1. Dans la console Google Cloud, accédez à la page Bases de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez une base de données dans la liste.

  3. Dans le menu de navigation, cliquez sur Index.

  4. Facultatif : Saisissez un nom pour l'index.

  5. Accédez à Type de recherche , puis sélectionnez Texte.

  6. Saisissez un ID de collection.

  7. Configurez un ou plusieurs champs à indexer.

  8. Définissez le champ d'application de la requête pour l'index.

  9. Sélectionnez une langue par défaut.

  10. Facultatif : Définissez un chemin de remplacement de la langue sur un nom de champ contenant le paramètre de langue d'un document.

  11. Cliquez sur Créer.

  12. Votre nouvel index s'affiche dans la liste des index et Cloud Firestore commence à le créer. Une fois que votre index est créé, une coche verte apparaît à côté de l'index.

Créer un index géospatial

Utilisez la console Google Cloud pour créer un index géospatial.

  1. Dans la console Google Cloud, accédez à la page Bases de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez une base de données dans la liste.

  3. Dans le menu de navigation, cliquez sur Index.

  4. Facultatif : Saisissez un nom pour l'index.

  5. Accédez à Type de recherche , puis sélectionnez Géo (2dsphere).

  6. Saisissez un ID de collection.

  7. Configurez un ou plusieurs champs à indexer.

  8. Définissez le champ d'application de la requête pour l'index.

  9. Cliquez sur Créer.

    Votre nouvel index s'affiche dans la liste des index et Cloud Firestore commence à le créer. Une fois que votre index est créé, une coche verte apparaît à côté de l'index.

Supprimer un index

Pour supprimer un index, procédez comme suit :

Firebase console
  1. Dans la console Firebase, accédez à la page Base de données Firestore.

    Accéder à la base de données Firestore

  2. Sélectionnez une base de données dans la liste.
  3. Cliquez sur l'onglet Index.
  4. Dans la liste des index, cliquez sur le bouton Plus de l'index que vous souhaitez supprimer, puis sélectionnez Supprimer.
  5. Cliquez sur Supprimer l'index.
gcloud CLI
  1. Pour trouver le nom de l'index, utilisez la gcloud firestore indexes composite list commande.

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

    Remplacez DATABASE_ID par l'ID de base de données.

  2. Pour supprimer l'index, utilisez la gcloud firestore indexes composite delete commande.

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

    Remplacez les éléments suivants :

    • INDEX_NAME : nom d'un index.
    • DATABASE_ID : ID de base de données.

Temps de création d'un index

Pour créer un index, Cloud Firestore doit créer l'index, puis remplir les entrées d'index avec les données existantes. Le temps nécessaire à la création d'un index est déterminé par les éléments suivants :

  • Le temps de création minimal d'un index est de quelques minutes, même pour une base de données vide.

  • Le temps nécessaire pour remplir les entrées d'index dépend de la quantité de données existantes appartenant au nouvel index. Plus les valeurs de champs correspondant à la définition de l'index sont nombreuses, plus le remplissage des entrées d'index prend du temps.

Gérer les opérations de longue durée

Les créations d'index sont des opérations de longue durée. Les sections suivantes décrivent comment utiliser les opérations de longue durée pour les index.

Une fois que vous avez commencé à créer un index, Cloud Firestore attribue un nom unique à l'opération. Les noms d'opération sont précédés de projects/PROJECT_ID/databases/DATABASE_ID/operations/, par exemple :

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Vous pouvez omettre le préfixe lorsque vous spécifiez un nom d'opération pour la commande describe.

Répertorier toutes les opérations de longue durée

Pour répertorier les opérations de longue durée, exécutez la gcloud firestore operations list commande. Cette commande répertorie les opérations en cours et récemment terminées. Une fois terminées, les opérations restent accessibles pendant quelques jours :

gcloud firestore operations list

Vérifier l'état de l'opération

Au lieu de répertorier toutes les opérations de longue durée, vous pouvez répertorier les détails d'une seule opération :

gcloud firestore operations describe operation-name

Estimation du délai d'exécution

Lorsque l'opération s'exécute, consultez la valeur du champ state pour connaître son état global.

Une requête permettant d'obtenir l'état d'une opération de longue durée renvoie également les métriques workEstimated et workCompleted. workEstimated indique le nombre total estimé de documents qu'une opération traitera. workCompleted indique le nombre de documents traités jusqu'à présent. Une fois l'opération terminée, workCompleted reflète le nombre total de documents réellement traités, qui peut être différent de la valeur de workEstimated.

Pour estimer la progression d'une opération, divisez workCompleted par workEstimated.

Voici un exemple de progression de la création d'un index :

{
  "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"
        }
       },
    },
    ...

Lorsqu'une opération est terminée, sa description contient "done": true. Consultez la valeur du champ state pour afficher le résultat de l'opération. Si le champ done n'est pas défini dans la réponse, cela signifie que l'opération n'est pas terminée.