Documentation de référence sur les définitions d'index dans Cloud Firestore

Cloud Firestore crée automatiquement des index pour les types de requêtes les plus courants, mais vous permet de définir des index personnalisés et des remplacements d'index, comme décrit dans les guides Cloud Firestore.

Vous pouvez créer, modifier et déployer des index personnalisés dans la console Firebase ou à l'aide de la CLI. À partir de la CLI, modifiez le fichier de configuration d'index avec le nom de fichier par défaut firestore.indexes.json, puis déployez-le à l'aide de la commande firebase deploy.

Vous pouvez exporter des index avec la CLI à l'aide de firebase firestore:indexes.

Un fichier de configuration d'index définit un objet contenant un tableau indexes et un tableau fieldOverrides facultatif. Exemple :

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

Déployer une configuration d'index

Déployez votre configuration d'index à l'aide de la commande firebase deploy. Si vous souhaitez ne déployer des index que pour les bases de données configurées dans votre projet, ajoutez l'option --only firestore. Consultez la documentation de référence sur les options pour cette commande.

Pour répertorier les index déployés, exécutez la commande firebase firestore:indexes. Ajoutez l'option --database=<databaseID> pour répertorier les index d'une base de données autre que celle par défaut de votre projet.

Si vous modifiez les index à l'aide de la console Firebase, veillez également à mettre à jour votre fichier d'index local. Pour en savoir plus sur la gestion des index, consultez les guides Cloud Firestore.

Format JSON

Index

Le schéma d'un objet du tableau indexes est le suivant. Les propriétés facultatives sont identifiées par le caractère ?.

Notez que les champs du document Cloud Firestore ne peuvent être indexés que dans un seul mode. Par conséquent, un objet champ ne peut contenir que l'une des propriétés order, arrayConfig et 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

Le schéma d'un objet du tableau fieldOverrides est le suivant. Les propriétés facultatives sont identifiées par le caractère ?.

Notez que les champs du document Cloud Firestore ne peuvent être indexés que dans un seul mode. Par conséquent, un objet champ ne peut pas contenir à la fois les propriétés order et 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

Règle TTL

Une règle TTL peut être activée ou désactivée à l'aide du tableau fieldOverrides comme suit:

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

Pour conserver l'indexation par défaut dans le champ et activer une règle TTL:

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

Pour en savoir plus sur les règles TTL (Time To Live), consultez la documentation officielle.