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.