Bu sayfada, dizinlerinizi nasıl yöneteceğiniz açıklanmıştı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ı uygulayı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", "indexes": [{"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şlemine ait denetleme günlükleri,
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adını kullanır. - Desteklenen dizin seçenekleri için dizinler ve dizin özellikleri bölümüne bakın.
Firebase konsolu
-
Firebase konsolunda Firestore Database sayfasına gidin.
- Veritabanları listesinden bir veritabanı seçin.
- Indexes (Dizinler) sekmesinde Create Index'i (Dizin Oluştur) 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.
- Seyrek olmayan veya seyrek alan varlığı seçeneklerinden birini belirleyin.
- İsteğe bağlı olarak çoklu anahtar dizini 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. Dizin 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ı 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ı kullanın ve 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: Dizine eklenecek 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ı tamamlayı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 dizine eklenir.
db.cities.createIndex({"country": "text", "food": "text"})
Dizine eklenecek alan bir dize veya dize dizisi olmalıdır.
Dizi dizinleri, arama dizinine eklenmez. Sonuç olarak, 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ılmıştır:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text" },
name: "country_text_food_text"
}
]
})
Varsayılan dil belirtme
İsterseniz varsayılan bir dil veya dokümanınızda varsayılan dili içerecek bir alan yolu da belirtebilirsiniz.
Aşağıdaki örnekte myLanguageField, language_override olarak belirtilmiştir. cities koleksiyonundaki bir doküman myLanguageField adlı bir alan içerdiğinde, bu alanın değeri, ilgili doküman için country alanını dizine ekleme dilini belirlemek amacıyla kullanılır. Bu değer, french olan 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 İngilizceye ayarlanır.
- Dil geçersiz kılma alanı, üst düzey bir alan olmalıdır. Boş bırakılırsa dil geçersiz kılma alanı varsayılan olarak
languagedeğerine ayarlanır. - Varsayılan dili
nullkarakterine ayarlarsanız Cloud Firestore, dil geçersiz kılma olarak herhangi bir alan 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" | Burmaca |
| "ca" | Katalanca |
| "ceb" | Sabuanca |
| "chr" | Çerokice |
| "zh" | Çince |
| "zh-Hant" | Çince_Geleneksel |
| "saat" | Hırvatça |
| "cs" | Çek dili |
| "da" | Danca |
| "nl" | Felemenkçe |
| "tr" | İngilizce |
| "eo" | Esperanto |
| "et" | Estonca |
| "fil" | Filipince |
| "fi" | Fince |
| "fr-FR" | Fransızca |
| "gl" | Galiçyaca |
| "ka" | Gürcüce |
| "de" | Almanca |
| "el" | Yunanca |
| "gu" | Gujarati |
| "ht" | Haiti_Kreolcesi |
| "ha" | Hausaca |
| "haw" | Hawai Usulü |
| "iw" | İbranice |
| "selam" | Hintçe |
| "hmn" | Hmong |
| "hu" | Macarca |
| "is" | İzlandaca |
| "ig" | İgbo dili |
| "id" | Endonezce |
| "ga" | İrlandaca |
| "it" | Italian |
| "ja" | Japonca |
| "jv" | Cava dili |
| "kn" | Kannada |
| "kk" | Kazakça |
| "km" | Kmerce |
| "ko" | Korece |
| "lo" | Laoca |
| "la" | Latince |
| "lv" | Letonca |
| "lt" | Litvanca |
| "lb" | Luxembourgish |
| "mk" | Makedonca |
| "mg" | Malgaşça |
| "ms" | Malayca |
| "ml" | Malayalam |
| "mt" | Maltaca |
| "mi" | Maori |
| "mr" | Marathi |
| "mfe" | Morisyen |
| "mn" | Moğolca |
| "sr-ME" | Sırpça_Karadağ |
| "ne" | Nepalce |
| "hayır" | Norveççe |
| "ny" | Nyanja |
| "veya" | Oriya |
| "fa" | Farsça |
| "pl" | Lehçe |
| "pt-BR" | Portekizce_Brezilya |
| "pt-PT" | Portekizce_Portekiz |
| "pa" | Punjabi |
| "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" | Somalice |
| "es" | İspanyolca |
| "su" | Sundaca |
| "sw" | Swahili |
| "sv" | İsveççe |
| "tg" | Tacikçe |
| "ta" | Tamilce |
| "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
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 her zaman belirli bir alanın filtrelenmesi gerekiyorsa daha yüksek performanslı sorgular çalıştırmanıza olanak tanır.
Bölüm içeren 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 alana başvurmalıdır. Bölümlenmiş bir dizinde sorgu çalıştırdığınızda sonuçları bu alanın değerine göre filtreleyebilirsiniz. Örneğin,citykullanarak dizininizi bölümlere ayırabilirsiniz. Metin dizininizde bircityalanı tanımlanmışsa kullanıcılar belirli bir şehir için sorgu yapabilir.Bölüm yalnızca bir alan olmalıdır. Bir dizini bölümlere ayırırsanız yalnızca bölümlere ayrılmış 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 denetleme günlükleri,
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adını kullanı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.
Indexes (Dizinler) sekmesinde Create Index'i (Dizin Oluştur) 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 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şturulmazsa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
gcloud CLI
Metin dizini 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_GROUP \ --field-config=field-path=FIELD_NAME,search-config='{"text-spec": {"index-specs": [{"index-type": "tokenized", "match-type": "match-globally"}]}}' \ --api-scope=mongodb-compatible-api \ --search-index-options=text-language=en \ --async
Aşağıdakini değiştirin:
- DATABASE_ID: Veritabanı kimliği.
- COLLECTION_GROUP: Dizine eklenecek koleksiyonun kimliği.
- FIELD_NAME: Dizine eklenecek alanın adı.
--async işareti, dizin oluşturma işlemini arka planda çalıştırır.
2dsphere dizini oluşturma
Coğrafi sorgular gerçekleştirmek ve belirli bir boylam ve enlemden belirli bir aralıkta bulunan belgeleri aramak için 2dsphere dizini oluşturun.
Koleksiyonunuz için bir 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 da en fazla bir dizinle desteklenir:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
}
]
})
2dsphere dizinini bölme
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 her zaman belirli bir alanın filtrelenmesi gerekiyorsa daha yüksek performanslı sorgular çalıştırmanıza olanak tanır.
Bölüm içeren 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 dizinde 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 restoranları sorgulayabilmesi için dizininiziregionkullanarak bölümlere ayırabilirsiniz.Bir dizini bölümlere ayırırsanız yalnızca bölümlere ayrılmış 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 denetleme günlükleri,
google.firestore.admin.v1.FirestoreAdmin.CreateIndexyöntem adını kullanı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.
Indexes (Dizinler) sekmesinde Create Index'i (Dizin Oluştur) 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 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şturulmazsa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
gcloud CLI
2dsphere dizini 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_GROUP \
--field-config=field-path=FIELD_NAME,search-config='{"geo-spec": {}}' \
--api-scope=mongodb-compatible-api \
--asyncAşağıdakini değiştirin:
- DATABASE_ID: Veritabanı kimliği.
- COLLECTION_GROUP: Dizine eklenecek koleksiyonun kimliği.
- FIELD_NAME: Dizine eklenecek alanın adı.
--async işareti, dizin oluşturma işlemini arka planda çalıştırır.
Dizini silme
Bir dizini silmek için aşağıdaki adımları uygulayı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.
- Delete Index'i (Dizini Sil) 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 girin.
-
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 oluşturma 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:
Boş bir veritabanı için bile dizin oluşturma süresi en az birkaç dakikadır.
Dizin girişlerini doldurmak için gereken süre, yeni dizine ait mevcut veri miktarına bağlıdır. Dizin tanımıyla eşleşen alan değeri sayısı ne kadar fazlaysa dizin girişlerinin doldurulması o kadar uzun sürer.
Uzun süreli işlemleri yönetme
Dizin derlemeleri uzun süreli işlemlerdir. Aşağıdaki bölümlerde, dizinler için uzun süreli işlemlerle 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/ eklenir.
Örneğin:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
describe komutu için işlem adı belirtirken ön eki atlayabilirsiniz.
Tüm uzun süreli işlemleri listeleme
Uzun süreli 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
Faaliyet durumunu kontrol etme
Tüm uzun süreli işlemleri listelemek yerine tek bir işlemin ayrıntılarını listeleyebilirsiniz:
gcloud firestore operations describe operation-name
Tamamlanma süresi tahmin ediliyor
İşleminiz çalışırken işlemin genel durumu için state alanının değerine bakın.
Uzun süreli bir işlemin durumuna yönelik istek, 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, gerçekte işlenen toplam belge sayısını yansıtır. Bu sayı, workEstimated değerinden farklı olabilir.
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ı "done": true değerini içerir. İşlemin sonucu için state alanının değerine bakın. Yanıtta done alanı ayarlanmamışsa işlem tamamlanmamıştır.