Mengelola indeks
Halaman ini menjelaskan cara mengelola indeks Anda. Untuk mempelajari lebih lanjut indeks, lihat Ringkasan indeks.
Sebelum memulai
Sebelum dapat membuat indeks di Firestore dengan kompatibilitas MongoDB, pastikan Anda diberi salah satu peran berikut:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Untuk memberikan peran, lihat Memberikan satu peran. Untuk mengetahui informasi selengkapnya tentang peran Firestore dan izin terkait, lihat Peran yang telah ditetapkan.
Jika Anda telah menentukan peran khusus, tetapkan semua izin berikut untuk membuat indeks:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Membuat indeks
Untuk membuat indeks, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode createIndex() untuk membuat indeks. Contoh:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
Pembuatan indeks dengan
db.runCommand()juga didukung dengan maksimal satu indeks.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Perhatikan batasan berikut:
- Anda hanya dapat membuat satu indeks per permintaan.
db.collection.createIndexes()tidak didukung. - Log audit untuk pembuatan indeks dengan MongoDB API menggunakan nama metode
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Untuk opsi indeks yang didukung, lihat indeks dan properti indeks.
KonsolGoogle Cloud
-
Di konsol Google Cloud , buka halaman Databases.
- Pilih database dari daftar database.
- Di menu navigasi, klik Indexes.
- Klik Create Index.
- Masukkan Collection ID.
- Tambahkan satu atau beberapa jalur kolom dan pilih opsi indeks untuk setiap jalur.
- Pilih opsi kehadiran kolom, baik non-sparse maupun sparse.
- Secara opsional, tetapkan opsi indeks multikey atau indeks unik.
- Klik Create.
- Indeks baru Anda ditampilkan dalam daftar indeks dan Firestore dengan kompatibilitas MongoDB mulai membuat indeks Anda. Setelah indeks dibuat, Anda akan melihat tanda centang hijau di samping indeks. Jika indeks tidak dibuat, lihat Error dalam mem-build indeks untuk mengetahui kemungkinan penyebabnya.
gcloud CLI
Untuk membuat indeks,
gunakan perintah
gcloud firestore indexes composite create. Tetapkan api-scope ke mongodb-compatible-api.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
Ganti kode berikut:
- DATABASE_ID: ID database.
- COLLECTION: nama koleksi.
- FIELD_CONFIGURATION: konfigurasi kolom. Untuk setiap kolom,
tambahkan
--field-config=field-path=. Contoh:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingUntuk mengetahui informasi selengkapnya tentang cara mengonfigurasi kolom ini, lihat
--field-config.
Untuk membuat indeks sparse, tetapkan --density=sparse-any.
Untuk membuat indeks multikey, tambahkan tanda --multikey.
Untuk membuat indeks unik, tambahkan tanda --unique.
Terraform
Gunakan resource
google_firestore_index
dan tetapkan api_scope ke MONGODB_COMPATIBLE_API serta query_scope ke COLLECTION_GROUP.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Ganti kode berikut:
- DATABASE_ID: ID database untuk database yang Anda pilih
- COLLECTION: Nama koleksi yang akan diindeks
- FIELD_PATH: Nama kolom yang akan diindeks
- ORDER: Salah satu dari
ASCENDINGatauDESCENDING - DENSITY: Salah satu dari
SPARSE_ANYatauDENSE
Membuat indeks teks
Buat indeks teks jika Anda ingin melakukan penelusuran teks untuk string tertentu dalam koleksi.
Untuk membuat indeks teks untuk koleksi Anda, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode
createIndex()
untuk membuat indeks teks.
Dalam contoh berikut, saat dokumen ditulis ke koleksi cities dengan kolom country atau food yang diisi, kolom ini diindeks untuk tujuan penelusuran.
db.cities.createIndex({"country": "text", "food": "text"})
Kolom harus berupa string atau array string yang akan diindeks.
Indeks array tidak diindeks penelusuran. Akibatnya, pengindeksan a.1.b akan mengindeks
something di {a: {1: {b: something}}}, tetapi tidak di
{a: [one, {b: something}]}.
Anda juga dapat membuat indeks dengan db.runCommand(). Anda hanya dapat memiliki satu
indeks teks per koleksi, tetapi Anda dapat membuat beberapa indeks dengan
jenis yang berbeda dalam satu db.runCommand(). Contoh berikut menggunakan db.runCommand()
untuk membuat indeks teks:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text" },
name: "country_text_food_text"
}
]
})
Menentukan bahasa default
Anda juga dapat secara opsional menentukan bahasa default, atau jalur kolom dalam dokumen yang akan berisi bahasa default.
Dalam contoh berikut, myLanguageField
ditentukan sebagai language_override. Jika dokumen dalam koleksi cities
berisi kolom bernama myLanguageField, nilai kolom tersebut
digunakan untuk menentukan bahasa untuk mengindeks kolom country untuk
dokumen tertentu tersebut. Nilai tersebut menggantikan bahasa default french.
db.cities.createIndex({"country": "text"}, {"default_language": "french", "language_override": "myLanguageField"})
- Anda dapat memasukkan bahasa sebagai nama panjangnya (
english) atau kode bahasa ISO dua hurufnya (en). - Jika bahasa default tidak ditetapkan, Firestore akan menggunakan bahasa Inggris secara default.
- Kolom penggantian bahasa harus berupa kolom tingkat teratas. Jika tidak ditetapkan, kolom penggantian bahasa akan ditetapkan secara default ke
language. - Jika Anda menyetel bahasa default ke karakter
null, maka Firestore dengan kompatibilitas MongoDB tidak menggunakan kolom apa pun sebagai penggantian bahasa.
Luaskan untuk melihat daftar bahasa yang didukung
| Kode Bahasa | Nama Bahasa |
|---|---|
| "und" | Deteksi otomatis |
| "af" | Afrika |
| "ak" | Akan |
| "sq" | Albania |
| "am" | Amhara |
| "ar" | Arab |
| "hy" | Armenia |
| "az" | Azerbaijan |
| "eu" | Basque |
| "be" | Belarus |
| "bn" | Bangla |
| "bs" | Bosnia |
| "bg" | Bulgaria |
| "my" | Burma |
| "ca" | Catalan |
| "ceb" | Cebuano |
| "chr" | Cherokee |
| "zh" | Cina |
| "zh-Hant" | China_Aksara_Tradisional |
| "hr" | Kroasia |
| "cs" | Ceko |
| "da" | Denmark |
| "nl" | Belanda |
| "en" | Inggris |
| "eo" | Esperanto |
| "et" | Estonia |
| "fil" | Filipina |
| "fi" | Finlandia |
| "fr" | Prancis |
| "gl" | Galisia |
| "ka" | Georgia |
| "de" | Jerman |
| "el" | Yunani |
| "gu" | Gujarat |
| "ht" | Haitian_Creole |
| "ha" | Hausa |
| "haw" | Hawaii |
| "iw" | Ibrani |
| "hai" | Hindi |
| "hmn" | Hmong |
| "hu" | Hungaria |
| "adalah" | Islandia |
| "ig" | Igbo |
| "id" | Indonesia |
| "ga" | Irlandia |
| "it" (itu) | Italia |
| "ja" | Jepang |
| "jv" | Jawa |
| "kn" | Kannada |
| "kk" | Kazak |
| "km" | Khmer |
| "ko" | Korea |
| "lo" | Laos |
| "la" | Latin |
| "lv" | Latvia |
| "lt" | Lituania |
| "lb" | Luksemburg |
| "mk" | Makedonia |
| "mg" | Malagasi |
| "ms" | Melayu |
| "ml" | Malayalam |
| "mt" | Malta |
| "mi" | Maori |
| "mr" | Marathi |
| "mfe" | Morisyen |
| "mn" | Mongol |
| "sr-ME" | Serbia_Montenegro |
| "ne" | Nepal |
| "tidak" | Norwegia |
| "ny" | Nyanja |
| "atau" | Odia |
| "fa" | Persia |
| "pl" | Polandia |
| "pt-BR" | Portugis_Brasil |
| "pt-PT" | Portugis_Portugal |
| "pa" | Punjab |
| "ro" | Rumania |
| "ru" | Rusia |
| "gd" | Gaelik Skotlandia |
| "sr" | Serb |
| "st" | Sotho Selatan |
| "si" | Sinhala |
| "sk" | Slovakia |
| "sl" | Slovenia |
| "jadi" | Somali |
| "es" | Spanyol |
| "su" | Sunda |
| "sw" | Swahili |
| "sv" | Swedia |
| "tg" | Tajik |
| "ta" | Tamil |
| "te" | Telugu |
| "th" | Thai |
| "tr" | Turki |
| "uk" | Ukraina |
| "ur" | Urdu |
| "uz" | Uzbek |
| "vi" | Vietnam |
| "cy" | Wales |
| "yi" | Yiddi |
| "yo" | Yoruba |
| "zu" | Zulu |
Memartisi indeks teks
Anda juga dapat mempartisi indeks menggunakan kolom sehingga Anda dapat memfilter kueri menurut nilai kolom tertentu. Konfigurasi ini memungkinkan Anda menjalankan kueri yang lebih berperforma jika Anda selalu memerlukan kolom tertentu yang difilter dalam indeks yang Anda kueri.
Untuk membuat indeks dengan partisi,
konfigurasi kolom firestoreOptions sebagai berikut:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text"},
name: "country_text_food_text"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Dengan:
PARTITIONED_FIELDadalah nama kolom yang digunakan untuk partisi. Nilai ini harus berupa string dan harus merujuk ke kolom tingkat teratas. Saat menjalankan kueri terhadap indeks yang dipartisi, Anda dapat memfilter hasil berdasarkan nilai kolom ini. Misalnya, Anda dapat mempartisi indeks menggunakancity. Jika kolomcityditentukan dalam indeks teks Anda, pengguna dapat membuat kueri terhadap kota tertentu.Partisi hanya boleh berupa satu kolom. Jika Anda mempartisi indeks, Anda hanya dapat menjalankan kueri dengan kolom yang dipartisi ditentukan.
Batasan
- Anda hanya dapat membuat satu indeks per permintaan.
- Log audit untuk pembuatan indeks dengan MongoDB API menggunakan nama metode
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Untuk opsi indeks yang didukung, lihat indeks dan properti indeks.
Konsol Google Cloud
Di Google Cloud konsol, buka halaman Databases.
Pilih database dari daftar database.
Di menu navigasi, klik Indexes.
Klik Create Index, lalu klik Create search index.
(Opsional) Masukkan nama untuk indeks.
Buka Jenis Penelusuran, lalu pilih Teks.
Masukkan Collection ID.
Masukkan minimal satu Jalur kolom.
Opsional: Tentukan bahasa default.
Misalnya, Anda menetapkan jalur penggantian bahasa ke
myLanguageField. Jika dokumen dalam koleksi Anda berisi kolom bernamamyLanguageField, nilai kolom tersebut digunakan untuk menentukan bahasa untuk mengindeks kolom yang ditentukan dalam indeks Anda. Nilai tersebut menggantikan bahasa default indeks Anda.Klik Create.
Indeks baru Anda ditampilkan dalam daftar indeks dan operasi yang kompatibel dengan MongoDB mulai membuat indeks Anda. Setelah indeks dibuat, Anda akan melihat tanda centang hijau di samping indeks. Jika indeks tidak dibuat, lihat Error dalam pembuatan indeks untuk mengetahui kemungkinan penyebabnya.
Membuat indeks 2dsphere
Buat indeks 2dsphere untuk melakukan kueri geospasial dan menelusuri dokumen yang ada dalam rentang tertentu dari bujur dan lintang tertentu.
Untuk membuat indeks 2dsphere untuk koleksi Anda, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode
createIndex()
untuk membuat indeks. Contoh:
db.restaurants.createIndex({"location" : "2dsphere", "region": "2dsphere"})
Pembuatan indeks dengan db.runCommand() juga didukung dengan maksimal satu
indeks:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
}
]
})
Mempartisi indeks 2dsphere
Anda juga dapat mempartisi indeks menggunakan kolom sehingga Anda dapat memfilter kueri menurut nilai kolom tertentu. Konfigurasi ini memungkinkan Anda menjalankan kueri yang lebih berperforma jika Anda selalu memerlukan kolom tertentu yang difilter dalam indeks yang Anda kueri.
Untuk membuat indeks dengan partisi,
konfigurasi kolom firestoreOptions sebagai berikut:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Dengan:
PARTITIONED_FIELDadalah nama kolom yang digunakan untuk partisi. Saat menjalankan kueri terhadap indeks yang dipartisi, Anda dapat memfilter hasil berdasarkan nilai kolom ini. Misalnya, jika indeks Anda memiliki kolomregionuntuk lokasi regional, Anda dapat mempartisi indeks menggunakanregionsehingga pengguna dapat membuat kueri terhadap restoran di wilayah mereka.Jika Anda memartisi indeks, Anda hanya dapat menjalankan kueri dengan kolom yang dipartisi ditentukan.
Batasan
- Anda hanya dapat membuat satu indeks per permintaan.
- Log audit untuk pembuatan indeks dengan MongoDB API menggunakan nama metode
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Untuk opsi indeks yang didukung, lihat indeks dan properti indeks.
Konsol Google Cloud
Di Google Cloud konsol, buka halaman Databases.
Pilih database dari daftar database.
Di menu navigasi, klik Indexes.
Klik Create Index, lalu klik Create search index.
Masukkan Collection ID.
Buka Search Type dan pilih Geo (2dsphere).
Klik Create.
Indeks baru Anda ditampilkan dalam daftar indeks dan operasi yang kompatibel dengan MongoDB mulai membuat indeks Anda. Setelah indeks dibuat, Anda akan melihat tanda centang hijau di samping indeks. Jika indeks tidak dibuat, lihat Error dalam pembuatan indeks untuk mengetahui kemungkinan penyebabnya.
Menghapus indeks
Untuk menghapus indeks, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode dropIndex() untuk menghapus indeks. Contoh:
Menghapus indeks menggunakan nama indeks
db.restaurants.dropIndex("cuisine_index")
Menghapus indeks menggunakan definisi indeks
db.restaurants.dropIndex({"cuisine" : 1})
KonsolGoogle Cloud
-
Di konsol Google Cloud , buka halaman Databases.
- Dari daftar database, pilih database.
- Di menu navigasi, klik Indexes.
- Dalam daftar indeks, pilih Delete dari tombol More untuk indeks yang ingin Anda hapus.
- Klik Delete Index.
gcloud CLI
Untuk menemukan nama indeks, gunakan perintah
gcloud firestore indexes composite list.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ganti DATABASE_ID dengan ID database.
-
Untuk menghapus index, gunakan perintah
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Ganti kode berikut:
- INDEX_NAME: nama indeks
- DATABASE_ID: ID database
Waktu build indeks
Untuk mem-build indeks, Firestore dengan kompatibilitas MongoDB harus membuat indeks, lalu mengisi ulang entri indeks dengan data yang ada. Waktu yang diperlukan untuk membuat indeks ditentukan oleh hal berikut:
Waktu build minimum untuk indeks adalah beberapa menit, meskipun untuk database yang kosong.
Waktu yang diperlukan untuk mengisi ulang entri indeks bergantung pada jumlah data yang ada dalam indeks baru. Semakin banyak nilai kolom yang cocok dengan definisi indeks, semakin lama waktu yang diperlukan untuk mengisi ulang entri indeks.
Mengelola operasi yang berjalan lama
Pembuatan indeks merupakan operasi yang berjalan lama. Bagian berikut menjelaskan cara menggunakan operasi yang berjalan lama untuk indeks.
Setelah Anda mulai membuat indeks, Firestore dengan kompatibilitas MongoDB akan menetapkan
nama unik untuk operasi tersebut. Nama operasi diawali dengan projects/PROJECT_ID/databases/DATABASE_ID/operations/, misalnya:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Anda dapat tidak menyertakan awalan saat menentukan nama operasi untuk
perintah describe.
Mencantumkan semua operasi yang berjalan lama
Untuk mencantumkan operasi yang berjalan lama, gunakan
perintah
gcloud firestore operations list. Perintah ini mencantumkan operasi yang sedang berlangsung dan yang baru saja selesai.
Operasi tercantum selama beberapa hari setelah selesai:
gcloud firestore operations list
Memeriksa status operasi
Alih-alih mencantumkan semua operasi yang berjalan lama, Anda dapat mencantumkan detail satu operasi:
gcloud firestore operations describe operation-name
Memperkirakan waktu penyelesaian
Saat operasi berjalan, lihat nilai kolom state untuk mengetahui status operasi secara keseluruhan.
Permintaan untuk status operasi yang berjalan lama juga menampilkan metrik workEstimated dan workCompleted. workEstimated menunjukkan perkiraan
jumlah total dokumen
yang akan diproses dalam operasi. workCompleted menunjukkan jumlah dokumen yang diproses sejauh ini. Setelah operasi selesai, workCompleted mencerminkan jumlah total dokumen yang sebenarnya diproses yang mungkin berbeda dari nilai workEstimated.
Untuk memperkirakan progres operasi, bagi workCompleted dengan workEstimated.
Berikut adalah contoh progres pembuatan indeks:
{
"operations": [
{
"name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
"metadata": {
"@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
"common": {
"operationType": "CREATE_INDEX",
"startTime": "2020-06-23T16:52:25.697539Z",
"state": "PROCESSING"
},
"progressDocuments": {
"workCompleted": "219327",
"workEstimated": "2198182"
}
},
},
...
Saat operasi selesai, deskripsi operasi akan berisi
"done": true. Lihat nilai kolom state untuk menemukan hasil operasi. Jika kolom done tidak ditetapkan dalam respons,
maka operasi belum selesai.