Bu sayfada, dizinlerinizi nasıl yöneteceğiniz açıklanmaktadır. Dizinler hakkında daha fazla bilgi edinmek için Dizinlere genel bakış başlıklı makaleyi inceleyin.
Başlamadan önce
Cloud Firestore içinde dizin oluşturabilmek için aşağıdaki rollerden birine atanmış olmanız gerekir:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Rol vermek için Tek bir rol verme başlıklı makaleyi inceleyin. Cloud Firestore rolleri ve ilişkili izinler hakkında daha fazla bilgi için Önceden tanımlanmış roller başlıklı makaleyi inceleyin.
Özel roller tanımladıysanız dizin oluşturmak için aşağıdaki izinlerin tümünü atayın:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Dizin oluşturma
Dizin oluşturmak için aşağıdaki adımları tamamlayın:
MongoDB API
Dizin oluşturmak için createIndex() yöntemini kullanın. Örneğin:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
db.runCommand()ile dizin oluşturma da en fazla bir dizinle desteklenir.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Aşağıdaki sınırlamalara dikkat edin:
- İstek başına yalnızca bir dizin oluşturabilirsiniz.
db.collection.createIndexes()desteklenmiyor. - MongoDB API ile dizin oluşturma için denetleme günlüklerinde
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adı kullanılır. - Desteklenen dizin seçenekleri için dizinler ve dizin özellikleri başlıklı makaleyi inceleyin.
Firebase konsolu
-
Firebase konsolunda Firestore Database sayfasına gidin.
- Veritabanları listesinden bir veritabanı seçin.
- Dizinler sekmesinde Dizin Oluştur'u tıklayın.
- Koleksiyon kimliği girin.
- Bir veya daha fazla alan yolu ekleyin ve her biri için bir dizin seçeneği belirleyin.
- Alan varlığı seçeneğini (seyrek olmayan veya seyrek) belirleyin.
- İsteğe bağlı olarak çok anahtarlı dizin seçeneğini ayarlayabilirsiniz.
- Oluştur'u tıklayın.
- Yeni dizininiz, dizinler listesinde gösterilir ve Cloud Firestore dizininizi oluşturmaya başlar. Dizininiz oluşturulduğunda dizinin yanında yeşil bir onay işareti görürsünüz. index oluşturulmazsa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
gcloud CLI
Dizin oluşturmak için gcloud firestore indexes composite create komutunu kullanın. api-scope değerini mongodb-compatible-api olarak ayarlayın.
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
Aşağıdakini değiştirin:
- DATABASE_ID: veritabanı kimliği.
- COLLECTION: Koleksiyon adı.
- FIELD_CONFIGURATION: alan yapılandırması. Her alan için
--field-config=field-path=ekleyin. Örneğin:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingBu alanları yapılandırma hakkında daha fazla bilgi için
--field-configbaşlıklı makaleyi inceleyin.
Seyrek dizin oluşturmak için --density=sparse-any değerini ayarlayın.
Çok anahtarlı bir dizin oluşturmak için --multikey işaretini ekleyin.
Benzersiz bir dizin oluşturmak için --unique işaretini ekleyin.
Terraform
google_firestore_index kaynağını kullanarak api_scope değerini MONGODB_COMPATIBLE_API, query_scope değerini ise COLLECTION_GROUP olarak ayarlayın.
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" }
Aşağıdakini değiştirin:
- DATABASE_ID: Seçtiğiniz veritabanının veritabanı kimliği
- COLLECTION: Dizinlenecek koleksiyonun adı
- FIELD_PATH: Dizine eklenecek alanın adı
- ORDER:
ASCENDINGveyaDESCENDINGdeğerlerinden biri - DENSITY:
SPARSE_ANYveyaDENSEdeğerlerinden biri
Metin dizini oluşturma
Bir koleksiyondaki belirli dizeler için metin araması yapmak istiyorsanız metin dizini oluşturun.
Koleksiyonunuz için metin dizini oluşturmak üzere aşağıdaki adımları uygulayın:
MongoDB API
Metin dizini oluşturmak için
createIndex()
yöntemini kullanın.
Aşağıdaki örnekte, cities koleksiyonuna country veya food alanları doldurulmuş bir doküman yazıldığında bu alanlar arama amacıyla indekslenir.
db.cities.createIndex({"country": "text", "food": "text"})
Bir alanın dizine eklenebilmesi için dize veya dize dizisi olması gerekir.
Dizi dizinleri, arama dizinine eklenmez. Bu nedenle, a.1.b dizine eklendiğinde something, {a: {1: {b: something}}} içinde dizine eklenir ancak {a: [one, {b: something}]} içinde dizine eklenmez.
db.runCommand() ile de dizin oluşturabilirsiniz. Koleksiyon başına yalnızca bir metin dizini oluşturabilirsiniz ancak bir db.runCommand() içinde farklı türlerde birden fazla dizin oluşturabilirsiniz. Aşağıdaki örnekte metin dizini oluşturmak için db.runCommand() kullanılmaktadır:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text" },
name: "country_text_food_text"
}
]
})
Varsayılan bir dil belirtme
İsteğe bağlı olarak varsayılan bir dil veya belgenizde varsayılan dili içerecek bir alan yolu da belirtebilirsiniz.
Aşağıdaki örnekte, myLanguageField, language_override olarak belirtilmiştir. cities koleksiyonundaki bir belgede myLanguageField adlı bir alan varsa bu alanın değeri, söz konusu belgedeki country alanının dizine eklenmesi için kullanılacak dili belirlemek üzere kullanılır. Bu değer, french için varsayılan dili geçersiz kılar.
db.cities.createIndex({"country": "text"}, {"default_language": "french", "language_override": "myLanguageField"})
- Dili uzun adıyla (
english) veya iki harfli ISO dil koduyla (en) girebilirsiniz. - Varsayılan dil ayarlanmazsa Cloud Firestore varsayılan olarak İngilizce olur.
- Dil geçersiz kılma alanı, üst düzey bir alan olmalıdır. Ayarlanmazsa dil geçersiz kılma alanı varsayılan olarak
languageolur. - Varsayılan dili
nullkarakterine ayarlarsanız Cloud Firestore, hiçbir alanı dil geçersiz kılma olarak kullanmaz.
Desteklenen dillerin listesini görmek için genişletin.
| Dil Kodu | Dil Adı |
|---|---|
| "und" | Otomatik algılama |
| "af" | Afrikaanca |
| "ak" | Akan |
| "sq" | Arnavutça |
| "am" | Amharca |
| "ar" | Arapça |
| "hy" | Ermenice |
| "az" | Azerice |
| "eu" | Baskça |
| "be" | Belarusça |
| "bn" | Bangla |
| "bs" | Boşnakça |
| "bg" | Bulgarca |
| "my" (benim) | Burmaca |
| "ca" | Katalanca |
| "ceb" | Sabuanca |
| "chr" | Çerokice |
| "zh" | Çince |
| "zh-Hant" | Chinese_Traditional |
| "hr" | Hırvatça |
| "cs" | Çek dili |
| "da" | Danca |
| "nl" | Felemenkçe |
| "en" | İngilizce |
| "eo" | Esperanto |
| "et" | Estonca |
| "fil" | Filipince |
| "fi" | Fince |
| "fr" | Fransızca |
| "gl" | Galiçyaca |
| "ka" | Gürcüce |
| "de" | Almanca |
| "el" | Yunanca |
| "gu" | Güceratça |
| "ht" | Haiti_Creole |
| "ha" | Hausaca |
| "haw" | Hawai Usulü |
| "iw" | İbranice |
| "merhaba" | Hintçe |
| "hmn" | Hmong Dili |
| "hu" | Macarca |
| "is" | İzlanda dili |
| "ig" | İgbo Dili |
| "id" | Endonezce |
| "ga" | İrlanda dili |
| "it" | İtalyanca |
| "ja" | Japonca |
| "jv" | Cava dili |
| "kn" | Kannada |
| "kk" | Kazakça |
| "km" | Kmerce |
| "ko" | Korece |
| "lo" | Laoca |
| "la" | Latince |
| "lv" | Letonca |
| "lt" | Litvanca |
| "lb" | Lüksemburgca |
| "mk" | Makedonca |
| "mg" | Malgaşça |
| "ms" | Malayca |
| "ml" | Malayalam |
| "mt" | Maltaca |
| "mi" | Maori |
| "mr" | Marathi |
| "mfe" | Morisyen |
| "mn" | Moğolca |
| "sr-ME" | Serbian_Montenegro |
| "ne" | Nepalce |
| "no" | Norveççe |
| "ny" | Nyanja |
| "or" | Oriya |
| "fa" | Farsça |
| "pl" | Lehçe |
| "pt-BR" | Portekizce_Brezilya |
| "pt-PT" | Portekizce_Portekiz |
| "pa" | Pencapça |
| "ro" | Rumence |
| "ru" | Rusça |
| "gd" | İskoç Galcesi |
| "sr" | Sırpça |
| "st" | Güney Sotho dili |
| "si" | Seylanca |
| "sk" | Slovakça |
| "sl" | Slovence |
| "so" (bu nedenle) | Somalice |
| "es" | İspanyolca |
| "su" | Sunda dili |
| "sw" | Swahili |
| "sv" | İsveççe |
| "tg" | Tacikçe |
| "ta" | Tamil dili |
| "te" | Telugu dili |
| "th" | Tayca |
| "tr" | Türkçe |
| "uk" | Ukraynaca |
| "ur" | Urduca |
| "uz" | Özbekçe |
| "vi" | Vietnamca |
| "cy" | Galce |
| "yi" | Yidiş |
| "yo" | Yorubaca |
| "zu" | Zulu |
Metin dizinini bölümlere ayırma
Ayrıca, sorguları belirli bir alan değerine göre filtreleyebilmek için dizininizi bir alan kullanarak da bölümleyebilirsiniz. Bu yapılandırma, sorguladığınız dizinde belirli bir alanın her zaman filtrelenmesi gerekiyorsa daha iyi performans gösteren sorgular çalıştırmanıza olanak tanır.
Bölümlendirilmiş bir dizin oluşturmak için firestoreOptions alanını aşağıdaki gibi yapılandırın:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text"},
name: "country_text_food_text"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Nerede:
PARTITIONED_FIELD, bölüm için kullanılan alanın adıdır. Bu değer bir dize olmalı ve üst düzey bir alanı referans almalıdır. Bölümlenmiş bir dizine karşı sorgu çalıştırdığınızda sonuçları bu alanın değerine göre filtreleyebilirsiniz. Örneğin, dizininizicitykullanarak bölümleyebilirsiniz. Metin dizininizde bircityalanı tanımlanmışsa kullanıcılar belirli bir şehri sorgulayabilir.Bölüm yalnızca bir alan olmalıdır. Bir dizini bölümlendirirseniz yalnızca bölümlendirilmiş alanın belirtildiği sorguları çalıştırabilirsiniz.
Sınırlamalar
- İstek başına yalnızca bir dizin oluşturabilirsiniz.
- MongoDB API ile dizin oluşturma için denetim günlüklerinde
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adı kullanılır. - Desteklenen dizin seçenekleri için dizinler ve dizin özellikleri başlıklı makaleyi inceleyin.
Firebase konsolu
Firebase konsolunda Firestore Veritabanı sayfasına gidin.
Veritabanları listesinden bir veritabanı seçin.
Dizinler sekmesinde Dizin Oluştur'u tıklayın.
Koleksiyon kimliği girin.
Bir veya daha fazla alan yolu ekleyin ve her biri için bir dizin seçeneği belirleyin.
Oluştur'u tıklayın.
Yeni dizininiz dizinler listesinde gösterilir ve MongoDB ile uyumlu işlemler dizininizi oluşturmaya başlar. Dizininiz oluşturulduğunda dizinin yanında yeşil bir onay işareti görürsünüz. Dizin oluşturulmadıysa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
2dsphere dizini oluşturma
Coğrafi sorgular gerçekleştirmek ve belirli bir boylam ile enlemden belirli bir aralıkta bulunan belgeleri aramak için 2dsphere dizini oluşturun.
Koleksiyonunuz için 2dsphere dizini oluşturmak üzere aşağıdaki adımları tamamlayın:
MongoDB API
Dizin oluşturmak için createIndex() yöntemini kullanın. Örneğin:
db.restaurants.createIndex({"location" : "2dsphere", "region": "2dsphere"})
db.runCommand() ile dizin oluşturma işlemi en fazla bir dizinle de desteklenir:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
}
]
})
2dsphere dizinini bölümlere ayırma
Ayrıca, sorguları belirli bir alan değerine göre filtreleyebilmek için dizininizi bir alan kullanarak da bölümleyebilirsiniz. Bu yapılandırma, sorguladığınız dizinde belirli bir alanın her zaman filtrelenmesi gerekiyorsa daha iyi performans gösteren sorgular çalıştırmanıza olanak tanır.
Bölümlendirilmiş bir dizin oluşturmak için firestoreOptions alanını aşağıdaki gibi yapılandırın:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Nerede:
PARTITIONED_FIELD, bölüm için kullanılan alanın adıdır. Bölümlenmiş bir dizine karşı sorgu çalıştırdığınızda sonuçları bu alanın değerine göre filtreleyebilirsiniz. Örneğin, dizininizde bölgesel konumlar için birregionalanı varsa kullanıcıların kendi bölgelerindeki restoranlarla ilgili sorgu yapabilmesi için dizininiziregionkullanarak bölümleyebilirsiniz.Bir dizini bölümlendirirseniz yalnızca bölümlendirilmiş alanın belirtildiği sorguları çalıştırabilirsiniz.
Sınırlamalar
- İstek başına yalnızca bir dizin oluşturabilirsiniz.
- MongoDB API ile dizin oluşturma için denetim günlüklerinde
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adı kullanılır. - Desteklenen dizin seçenekleri için dizinler ve dizin özellikleri başlıklı makaleyi inceleyin.
Firebase konsolu
Firebase konsolunda Firestore Veritabanı sayfasına gidin.
Veritabanları listesinden bir veritabanı seçin.
Dizinler sekmesinde Dizin Oluştur'u tıklayın.
Koleksiyon kimliği girin.
Bir veya daha fazla alan yolu ekleyin ve her biri için bir dizin seçeneği belirleyin.
Oluştur'u tıklayın.
Yeni dizininiz dizinler listesinde gösterilir ve MongoDB ile uyumlu işlemler dizininizi oluşturmaya başlar. Dizininiz oluşturulduğunda dizinin yanında yeşil bir onay işareti görürsünüz. Dizin oluşturulmadıysa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
Dizin silme
Bir dizini silmek için aşağıdaki adımları tamamlayın:
MongoDB API
Bir dizini silmek için dropIndex() yöntemini kullanın. Örneğin:
Dizin adını kullanarak dizin silme
db.restaurants.dropIndex("cuisine_index")
Dizin tanımını kullanarak dizin silme
db.restaurants.dropIndex({"cuisine" : 1})
Firebase konsolu
-
Firebase konsolunda Firestore Database sayfasına gidin.
- Veritabanları listesinden bir veritabanı seçin.
- Dizinler sekmesini tıklayın.
- Dizin listesinde, silmek istediğiniz dizin için Diğer düğmesinden Sil'i seçin.
- Dizini Sil'i tıklayın.
gcloud CLI
Dizinin adını bulmak için
gcloud firestore indexes composite listkomutunu kullanın.gcloud firestore indexes composite list \ --database='DATABASE_ID'
DATABASE_ID yerine veritabanı kimliğini yazın.
-
Dizini silmek için
gcloud firestore indexes composite deletekomutunu kullanın.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Aşağıdakini değiştirin:
- INDEX_NAME: bir dizinin adı
- DATABASE_ID: veritabanı kimliği
Dizin derleme süresi
Dizin oluşturmak için Cloud Firestore dizini oluşturmalı ve ardından dizin girişlerini mevcut verilerle doldurmalıdır. Dizin oluşturmak için gereken süre aşağıdakilere göre belirlenir:
Bir dizinin minimum derleme süresi, boş bir veritabanı için bile birkaç dakikadır.
Dizin girişlerini doldurmak için gereken süre, yeni dizinde ne kadar mevcut veri olduğuna bağlıdır. Dizin tanımıyla eşleşen alan değerleri ne kadar fazlaysa dizin girişlerinin doldurulması o kadar uzun sürer.
Uzun süreli işlemleri yönetme
Dizin oluşturma işlemleri uzun süreli işlemlerdir. Aşağıdaki bölümlerde, uzun süren dizin işlemleriyle nasıl çalışılacağı açıklanmaktadır.
Dizin oluşturmaya başladıktan sonra Cloud Firestore, işleme benzersiz bir ad atar. İşlem adlarının önüne projects/PROJECT_ID/databases/DATABASE_ID/operations/ ön eki eklenir.
Örneğin:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
describe komutu için işlem adı belirtirken öneki atlayabilirsiniz.
Tüm uzun süreli işlemleri listeleme
Uzun süren işlemleri listelemek için gcloud firestore operations list komutunu kullanın. Bu komut, devam eden ve yakın zamanda tamamlanan işlemleri listeler.
İşlemler, tamamlandıktan sonra birkaç gün boyunca listelenir:
gcloud firestore operations list
İşlem durumunu kontrol etme
Uzun süreli işlemlerin tamamını listelemek yerine tek bir işlemin ayrıntılarını listeleyebilirsiniz:
gcloud firestore operations describe operation-name
Tamamlanma süresini tahmin etme
İşleminiz çalışırken işlemin genel durumu için state alanının değerini görün.
Uzun süreli bir işlemin durumuyla ilgili istekler, workEstimated ve workCompleted metriklerini de döndürür. workEstimated, bir işlemin işleyeceği tahmini toplam belge sayısını gösterir. workCompleted
Şu ana kadar işlenen doküman sayısını gösterir. İşlem tamamlandıktan sonra,
workCompleted, workEstimated değerinden farklı olabilecek, gerçekten işlenen toplam belge sayısını yansıtır.
Bir işlemin ilerleme durumunu tahmin etmek için workCompleted değerini workEstimated değerine bölün.
Aşağıda, dizin oluşturma sürecine dair bir örnek verilmiştir:
{
"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"
}
},
},
...
Bir işlem tamamlandığında işlem açıklamasında "done": true yer alır. İşlemin sonucu için state alanının değerine bakın. Yanıtın done alanı ayarlanmamışsa işlem tamamlanmamıştır.