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.