Cloud Firestore secara otomatis membuat indeks untuk mendukung jenis kueri yang paling umum, tetapi memungkinkan Anda menentukan indeks kustom dan penggantian indeks seperti yang dijelaskan dalam panduan Cloud Firestore.
Anda dapat membuat, mengubah, dan men-deploy indeks kustom di Firebase console, atau menggunakan CLI. Dari CLI, edit file konfigurasi indeks Anda, dengan nama file default firestore.indexes.json
, dan deploy menggunakan perintah firebase
deploy
.
Anda dapat mengekspor indeks dengan CLI menggunakan firebase firestore:indexes
.
File konfigurasi indeks menentukan satu objek yang berisi array indexes
dan array fieldOverrides
opsional.
Berikut contohnya:
{
// 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: []
}
]
}
Men-deploy konfigurasi indeks
Deploy konfigurasi indeks Anda dengan perintah firebase deploy
. Jika Anda hanya ingin men-deploy indeks untuk database yang dikonfigurasi di project Anda, tambahkan flag --only firestore
. Lihat referensi opsi untuk perintah ini.
Untuk mencantumkan indeks yang di-deploy, jalankan perintah firebase firestore:indexes
. Tambahkan flag --database=<databaseID>
guna mencantumkan indeks untuk database selain database default project Anda.
Jika Anda mengedit indeks menggunakan Firebase console, pastikan Anda juga mengupdate file indeks lokal. Untuk mengetahui informasi lebih lanjut tentang cara mengelola indeks, baca panduan Cloud Firestore.
Format JSON
Indeks
Skema untuk satu objek dalam array indexes
adalah sebagai berikut. Properti opsional diidentifikasi dengan karakter ?
.
Perlu diperhatikan bahwa kolom dokumen Cloud Firestore hanya dapat diindeks dalam satu mode, sehingga objek kolom hanya dapat berisi salah satu dari properti order
, arrayConfig
, dan 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
Skema untuk satu objek dalam array fieldOverrides
adalah sebagai berikut. Properti opsional diidentifikasi dengan karakter ?
.
Perlu diperhatikan bahwa kolom dokumen Cloud Firestore hanya dapat diindeks dalam satu mode, sehingga objek kolom tidak dapat berisi properti order
dan 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
Kebijakan TTL
Kebijakan TTL dapat diaktifkan atau dinonaktifkan menggunakan array fieldOverrides
sebagai berikut:
// 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: []
}
]
Untuk tetap menggunakan pengindeksan default di kolom dan mengaktifkan kebijakan TTL:
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Untuk mengetahui informasi selengkapnya tentang kebijakan time to live (TTL), baca dokumentasi resmi.