Cloud Firestore otomatis membuat indeks untuk mendukung metode kueri yang sama, tetapi juga memungkinkan Anda untuk menentukan indeks kustom dan penggantian indeks dijelaskan dalam panduan Cloud Firestore.
Anda dapat membuat, memodifikasi, 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 mendefinisikan satu objek yang berisi sebuah
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,
flag --only firestore
. Lihat referensi opsi untuk perintah ini.
Untuk menampilkan daftar indeks yang di-deploy, jalankan perintah firebase firestore:indexes
. Tambahkan
Flag --database=<databaseID>
untuk mencantumkan indeks untuk database selain Anda
dari database default project.
Jika Anda mengedit indeks menggunakan Firebase console, pastikan juga memperbarui file indeks lokal Anda. Untuk informasi selengkapnya tentang mengelola indeks, lihat Panduan Cloud Firestore.
Format JSON
Indeks
Skema untuk satu objek dalam array indexes
adalah sebagai berikut. Opsional
properti diidentifikasi dengan karakter ?
.
Perhatikan bahwa kolom dokumen Cloud Firestore hanya dapat diindeks dalam satu mode,
sehingga objek kolom hanya dapat berisi salah satu dari order
, arrayConfig
, dan
Properti 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
Penggantian Kolom
Skema untuk satu objek dalam array fieldOverrides
adalah sebagai berikut. Opsional
properti diidentifikasi dengan karakter ?
.
Perhatikan bahwa kolom dokumen Cloud Firestore hanya dapat diindeks dalam satu mode,
sehingga objek kolom tidak boleh berisi order
dan arrayConfig
properti baru.
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 menggunakan pengindeksan default dalam 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 informasi lebih lanjut tentang kebijakan time to live (TTL), tinjau dokumentasi resmi.