Indexe verwalten
Auf dieser Seite wird beschrieben, wie Sie Ihre Indexe verwalten. Weitere Informationen zu Indexen finden Sie unter Indexe – Übersicht.
Hinweis
Bevor Sie einen Index in Firestore mit MongoDB-Kompatibilität erstellen können, muss Ihnen eine der folgenden Rollen zugewiesen sein:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
Informationen zum Zuweisen einer Rolle finden Sie unter Einzelne Rolle zuweisen. Weitere Informationen zu Firestore-Rollen und den zugehörigen Berechtigungen finden Sie unter Vordefinierte Rollen.
Wenn Sie benutzerdefinierte Rollen definiert haben, weisen Sie alle folgenden Berechtigungen zum Erstellen von Indexen zu:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
Index erstellen
So erstellen Sie einen Index:
MongoDB API
Verwenden Sie die Methode createIndex(), um einen Index zu erstellen. Beispiel:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
Die Indexerstellung mit
db.runCommand()wird ebenfalls mit maximal einem Index unterstützt.db.runCommand({"createIndexes":"restaurant", "indexes": [{"key": {"cuisine":1}, "name": "cuisine_index"}]})
Beachten Sie die folgenden Beschränkungen:
- Sie können nur einen Index pro Anfrage erstellen.
db.collection.createIndexes()wird nicht unterstützt. - Audit-Logs für die Indexerstellung mit der MongoDB API verwenden den Methodennamen
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Informationen zu unterstützten Indexoptionen finden Sie unter Indizes und Indexattribute.
Google Cloud Console
-
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
- Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
- Klicken Sie im Navigationsmenü auf Indizes.
- Klicken Sie auf Index erstellen.
- Geben Sie eine Sammlungs-ID ein.
- Fügen Sie einen oder mehrere Feldpfade hinzu und wählen Sie für jeden eine Indexoption aus.
- Wählen Sie eine Option für die Feldpräsenz aus, entweder „nicht spärlich“ oder „spärlich“.
- Optional können Sie die Optionen Index mit mehreren Schlüsseln oder Eindeutiger Index festlegen.
- Klicken Sie auf Erstellen.
- Der neue Index wird in der Liste der Indexe angezeigt und Firestore mit MongoDB-Kompatibilität beginnt mit der Erstellung des Index. Wenn Ihr Index erstellt wurde, sehen Sie neben dem Index ein grünes Häkchen. Wenn der Index nicht erstellt wird, finden Sie unter Fehler beim Erstellen von Indexen mögliche Ursachen.
gcloud-CLI
Verwenden Sie den Befehl gcloud firestore indexes composite create, um einen Index zu erstellen. Legen Sie api-scope auf mongodb-compatible-api fest.
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
Ersetzen Sie Folgendes:
- DATABASE_ID: eine Datenbank-ID.
- COLLECTION: ein Sammlungsname.
- FIELD_CONFIGURATION: Eine Feldkonfiguration. Fügen Sie für jedes Feld
--field-config=field-path=hinzu. Beispiel:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descendingWeitere Informationen zum Konfigurieren dieser Felder finden Sie unter
--field-config.
Wenn Sie einen dünnbesetzten Index erstellen möchten, legen Sie --density=sparse-any fest.
Wenn Sie einen Index mit mehreren Schlüsseln erstellen möchten, fügen Sie das Flag --multikey hinzu.
Wenn Sie einen eindeutigen Index erstellen möchten, fügen Sie das Flag --unique hinzu.
Terraform
Verwenden Sie die Ressource google_firestore_index und legen Sie api_scope auf MONGODB_COMPATIBLE_API und query_scope auf COLLECTION_GROUP fest.
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" }
Ersetzen Sie Folgendes:
- DATABASE_ID: Die Datenbank-ID für die ausgewählte Datenbank
- COLLECTION: Der Name der zu indexierenden Sammlung
- FIELD_PATH: Der Name des zu indexierenden Felds.
- ORDER: Entweder
ASCENDINGoderDESCENDING - DENSITY: Entweder
SPARSE_ANYoderDENSE
Textindex erstellen
Erstellen Sie einen Textindex, wenn Sie in einer Sammlung eine Text Search nach bestimmten Strings durchführen möchten.
So erstellen Sie einen Textindex für Ihre Sammlung:
MongoDB API
Verwenden Sie die Methode createIndex(), um einen Textindex zu erstellen.
Wenn im folgenden Beispiel ein Dokument in die Sammlung cities geschrieben wird und die Felder country oder food ausgefüllt sind, werden diese Felder für Suchzwecke indexiert.
db.cities.createIndex({"country": "text", "food": "text"})
Ein Feld muss ein String oder ein Array von Strings sein, um indexiert zu werden.
Array-Indizes werden nicht im Suchindex erfasst. Wenn Sie a.1.b indexieren, wird something in {a: {1: {b: something}}}, aber nicht in {a: [one, {b: something}]} indexiert.
Sie können auch mit db.runCommand() Indexe erstellen. Sie können nur einen Textindex pro Sammlung haben, aber mehrere Indexe verschiedener Typen in einer db.runCommand() erstellen. Im folgenden Beispiel wird db.runCommand() verwendet, um einen Textindex zu erstellen:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text" },
name: "country_text_food_text"
}
]
})
Standardsprache angeben
Sie können optional auch eine Standardsprache oder einen Feldpfad in Ihrem Dokument angeben, der die Standardsprache enthält.
Im folgenden Beispiel wird myLanguageField als language_override angegeben. Wenn ein Dokument in der Sammlung cities ein Feld mit dem Namen myLanguageField enthält, wird der Wert dieses Felds verwendet, um die Sprache für die Indexierung des Felds country für dieses bestimmte Dokument zu bestimmen. Dieser Wert überschreibt die Standardsprache french.
db.cities.createIndex({"country": "text"}, {"default_language": "french", "language_override": "myLanguageField"})
- Sie können eine Sprache entweder als Langform (
english) oder als zweistelligen ISO-Sprachcode (en) eingeben. - Wenn die Standardsprache nicht festgelegt ist, wird in Firestore standardmäßig Englisch verwendet.
- Das Feld für die Sprachüberschreibung muss ein Feld auf oberster Ebene sein. Wenn das Feld für die Sprachüberschreibung nicht festgelegt ist, wird standardmäßig
languageverwendet. - Wenn Sie die Standardsprache auf das Zeichen
nullfestlegen, wird in Firestore mit MongoDB-Kompatibilität kein Feld als Sprachüberschreibung verwendet.
Maximieren, um eine Liste der unterstützten Sprachen aufzurufen
| Sprachcode | Sprache |
|---|---|
| „und“ | Automatisch erkennen |
| „af“ | Afrikaans |
| „ak“ | Akan |
| „sq“ | Albanisch |
| „am“ | Amharisch |
| "ar" | Arabisch |
| "hy" | Armenisch |
| "az" | Aserbaidschanisch |
| „eu“ | Baskisch |
| "be" | Belarussisch |
| „bn“ | Bengalisch |
| "bs" | Bosnisch |
| "bg" | Bulgarisch |
| "my" | Burmesisch |
| „ca“ | Katalanisch |
| „ceb“ | Cebuano |
| "chr" | Cherokee |
| „zh“ | Chinesisch |
| „zh-Hant“ | Chinese_Traditional |
| „hr“ | Kroatisch |
| „cs“ | Tschechisch |
| "da" | Dänisch |
| "nl" | Niederländisch |
| "en" | Englisch |
| "eo" | Esperanto |
| „et“ | Estnisch |
| „fil“ | Filipino |
| "fi" | Finnisch |
| "de" | Französisch |
| „gl“ | Galizisch |
| „ka“ | Georgisch |
| „de“ | Deutsch |
| „el“ | Griechisch |
| „gu“ | Gujarati |
| "ht" | Haitian_Creole |
| "ha" | Hausa |
| „haw“ | Hawaiisch |
| "iw" | Hebräisch |
| „Hallo“ | Hindi |
| "hmn" | Hmong |
| „hu“ | Ungarisch |
| "is" | Isländisch |
| „ig“ | Igbo |
| „id“ | Indonesisch |
| "ga" | Irisch |
| "it" | Italienisch |
| „ja“ | Japanisch |
| „jv“ | Javanisch |
| "kn" | Kannada |
| "kk" | Kasachisch |
| „km“ | Khmer |
| "ko" | Koreanisch |
| "lo" | Lao |
| "la" | Latein |
| „lv“ | Lettisch |
| „lt“ | Litauisch |
| „lb“ | Luxemburgisch |
| „mk“ | Mazedonisch |
| „mg“ | Malagasy |
| „ms“ | Malaiisch |
| "ml" | Malayalam |
| „mt“ | Maltesisch |
| "mi" | Maori |
| „mr“ | Marathi |
| „mfe“ | Morisyen |
| „mn“ | Mongolisch |
| "sr-ME" | Serbian_Montenegro |
| „ne“ | Nepalesisch |
| „Nein“ | Norwegisch |
| "ny" | Chichewa |
| „oder“ | Oriya |
| „fa“ | Persisch |
| "pl" | Polnisch |
| „pt-BR“ | Portuguese_Brazil |
| „pt-PT“ | Portuguese_Portugal |
| „pa“ | Punjabi |
| „ro“ | Rumänisch |
| "ru" | Russisch |
| „gd“ | Schottisches Gälisch |
| "sr" | Serbisch |
| „st“ | Süd-Sotho |
| „si“ | Singhalesisch |
| "sk" | Slowakisch |
| "sl" | Slowenisch |
| "so" | Somali |
| „es“ | Spanisch |
| "su" | Sundanesisch |
| „sw“ | Suaheli |
| „sv“ | Schwedisch |
| „tg“ | Tadschikisch |
| "ta" | Tamil |
| "te" | Telugu |
| „th“ | Thailändisch |
| „tr“ | Türkisch |
| „uk“ | Ukrainisch |
| „ur“ | Urdu |
| „uz“ | Usbekisch |
| „vi“ | Vietnamesisch |
| „cy“ | Walisisch |
| „yi“ | Jiddisch |
| „yo“ | Yoruba |
| „zu“ | Zulu |
Textindex partitionieren
Sie können Ihren Index auch mithilfe eines Felds partitionieren, damit Sie Abfragen nach einem bestimmten Feldwert filtern können. Mit dieser Konfiguration können Sie leistungsfähigere Abfragen ausführen, wenn Sie immer ein bestimmtes Feld im Index filtern müssen, den Sie abfragen.
Wenn Sie einen Index mit einer Partition erstellen möchten, konfigurieren Sie das Feld firestoreOptions so:
db.runCommand({
createIndexes: "cities",
indexes: [
{
key: { "country": "text", "food": "text"},
name: "country_text_food_text"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Wobei:
PARTITIONED_FIELDist der Name des Felds, das für die Partition verwendet wird. Dieser Wert muss ein String sein und sich auf ein Feld der obersten Ebene beziehen. Wenn Sie eine Abfrage für einen partitionierten Index ausführen, können Sie die Ergebnisse anhand eines Werts dieses Felds filtern. Sie können Ihren Index beispielsweise mitcitypartitionieren. Wenn in Ihrem Textindex eincity-Feld definiert ist, können Nutzer Abfragen für eine bestimmte Stadt ausführen.Die Partition darf nur ein Feld sein. Wenn Sie einen Index partitionieren, können Sie nur Abfragen ausführen, in denen das partitionierte Feld angegeben ist.
Einschränkungen
- Sie können nur einen Index pro Anfrage erstellen.
- Für Audit-Logs für die Indexerstellung mit der MongoDB API wird der Methodenname
google.firestore.admin.v1.FirestoreAdmin.CreateIndexverwendet. - Informationen zu unterstützten Indexoptionen finden Sie unter Indexe und Indexattribute.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Indexe.
Klicken Sie auf Index erstellen und dann auf Suchindex erstellen.
Optional: Geben Sie einen Namen für den Index ein.
Klicken Sie auf Suchtyp und wählen Sie Text aus.
Geben Sie eine Sammlungs-ID ein.
Geben Sie mindestens einen Feldpfad ein.
Optional: Geben Sie eine Standardsprache an.
Sie legen beispielsweise den Pfad zum Überschreiben der Sprache auf
myLanguageFieldfest. Wenn ein Dokument in Ihrer Sammlung ein Feld mit dem NamenmyLanguageFieldenthält, wird der Wert dieses Felds verwendet, um die Sprache für die Indexierung der in Ihrem Index definierten Felder zu bestimmen. Dieser Wert überschreibt die Standardsprache Ihres Index.Klicken Sie auf Erstellen.
Der neue Index wird in der Liste der Indexe angezeigt und MongoDB-kompatible Vorgänge beginnen mit der Erstellung des Index. Wenn Ihr Index erstellt wurde, sehen Sie daneben ein grünes Häkchen. Wenn der Index nicht erstellt wird, finden Sie unter Fehler beim Erstellen des Index mögliche Ursachen.
gcloud-CLI
Verwenden Sie den Befehl gcloud firestore indexes composite create, um einen Textindex zu erstellen. Legen Sie --api-scope auf mongodb-compatible-api fest.
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
Ersetzen Sie Folgendes:
- DATABASE_ID: eine Datenbank-ID.
- COLLECTION_GROUP: Die ID der zu indexierenden Sammlung.
- FIELD_NAME: Der Name des zu indexierenden Felds.
Mit dem Flag --async wird der Vorgang zur Indexerstellung im Hintergrund ausgeführt.
2dsphere-Index erstellen
Erstellen Sie einen 2dsphere-Index, um Geodatenabfragen auszuführen und nach Dokumenten zu suchen, die sich in einem bestimmten Bereich von einem bestimmten Längen- und Breitengrad befinden.
So erstellen Sie einen 2dsphere-Index für Ihre Sammlung:
MongoDB API
Verwenden Sie die Methode createIndex(), um einen Index zu erstellen. Beispiel:
db.restaurants.createIndex({"location" : "2dsphere", "region": "2dsphere"})
Die Indexerstellung mit db.runCommand() wird auch mit maximal einem Index unterstützt:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
}
]
})
2dsphere-Index partitionieren
Sie können Ihren Index auch mithilfe eines Felds partitionieren, um Abfragen nach einem bestimmten Feldwert zu filtern. Mit dieser Konfiguration können Sie leistungsfähigere Abfragen ausführen, wenn Sie immer ein bestimmtes Feld im Index filtern müssen, den Sie abfragen.
Wenn Sie einen Index mit einer Partition erstellen möchten, konfigurieren Sie das Feld firestoreOptions so:
db.runCommand({
createIndexes: "restaurants",
indexes: [
{
key: { "location": "2dsphere", "region": "2dsphere" },
name: "location_2dsphere_region_2dsphere"
firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
}
]
})
Wobei:
PARTITIONED_FIELDist der Name des Felds, das für die Partition verwendet wird. Wenn Sie eine Abfrage für einen partitionierten Index ausführen, können Sie die Ergebnisse anhand eines Werts dieses Felds filtern. Wenn Ihr Index beispielsweise einregion-Feld für regionale Standorte enthält, können Sie Ihren Index mitregionpartitionieren, damit Nutzer nach Restaurants in ihrer Region suchen können.Wenn Sie einen Index partitionieren, können Sie nur Abfragen ausführen, in denen das partitionierte Feld angegeben ist.
Einschränkungen
- Sie können nur einen Index pro Anfrage erstellen.
- Audit-Logs für die Indexerstellung mit der MongoDB API verwenden den Methodennamen
google.firestore.admin.v1.FirestoreAdmin.CreateIndex. - Informationen zu unterstützten Indexoptionen finden Sie unter Indizes und Indexeigenschaften.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie eine Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Indexe.
Klicken Sie auf Index erstellen und dann auf Suchindex erstellen.
Geben Sie eine Sammlungs-ID ein.
Gehen Sie zu Suchtyp und wählen Sie Geo (2dsphere) aus.
Klicken Sie auf Erstellen.
Der neue Index wird in der Liste der Indexe angezeigt und MongoDB-kompatible Vorgänge beginnen mit der Erstellung des Index. Wenn Ihr Index erstellt wurde, sehen Sie daneben ein grünes Häkchen. Wenn der Index nicht erstellt wird, finden Sie unter Fehler beim Erstellen des Index mögliche Ursachen.
gcloud-CLI
Verwenden Sie den Befehl gcloud firestore indexes composite create, um einen 2dsphere-Index zu erstellen. Legen Sie --api-scope auf mongodb-compatible-api fest.
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 \
--asyncErsetzen Sie Folgendes:
- DATABASE_ID: eine Datenbank-ID.
- COLLECTION_GROUP: Die ID der zu indexierenden Sammlung.
- FIELD_NAME: Der Name des zu indexierenden Felds.
Mit dem Flag --async wird der Vorgang zur Indexerstellung im Hintergrund ausgeführt.
Index löschen
So löschen Sie einen Index:
MongoDB API
Verwenden Sie die Methode dropIndex(), um einen Index zu löschen. Beispiel:
Index anhand des Indexnamens löschen
db.restaurants.dropIndex("cuisine_index")
Index anhand der Indexdefinition löschen
db.restaurants.dropIndex({"cuisine" : 1})
Google Cloud Console
-
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
- Wählen Sie eine Datenbank aus der Liste aus.
- Klicken Sie im Navigationsmenü auf Indizes.
- Wählen Sie in der Liste der Indexe für den Index, den Sie löschen möchten, über den Button Mehr die Option Löschen aus.
- Klicken Sie auf Index löschen.
gcloud-CLI
Verwenden Sie den Befehl
gcloud firestore indexes composite list, um den Namen des Index zu ermitteln.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ersetzen Sie DATABASE_ID durch die Datenbank-ID.
-
Verwenden Sie zum Löschen des Index den Befehl
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Ersetzen Sie Folgendes:
- INDEX_NAME: der Name eines Index
- DATABASE_ID: eine Datenbank-ID
Indexaufbauzeit
Um einen Index zu erstellen, muss Firestore mit MongoDB-Kompatibilität den Index erstellen und dann die Indexeinträge mit vorhandenen Daten auffüllen. Die Zeit, die zum Erstellen eines Index erforderlich ist, hängt von Folgendem ab:
Die Mindestdauer für die Erstellung eines Index beträgt einige Minuten, auch für eine leere Datenbank.
Die Zeit, die für den Backfill von Indexeinträgen erforderlich ist, hängt davon ab, wie viele vorhandene Daten in den neuen Index gehören. Je mehr Feldwerte mit der Indexdefinition übereinstimmen, desto länger dauert es, die Indexeinträge mit Daten zu füllen.
Vorgänge mit langer Ausführungszeit verwalten
Index-Builds sind Vorgänge mit langer Ausführungszeit. In den folgenden Abschnitten wird beschrieben, wie Sie mit Vorgängen mit langer Ausführungszeit für Indexe arbeiten.
Nachdem Sie mit dem Erstellen eines Index begonnen haben, weist Firestore mit MongoDB-Kompatibilität dem Vorgang einen eindeutigen Namen zu. Vorgangsnamen haben das Präfix projects/PROJECT_ID/databases/DATABASE_ID/operations/, zum Beispiel:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Sie können das Präfix weglassen, wenn Sie einen Vorgangsnamen für den describe-Befehl angeben.
Alle Vorgänge mit langer Ausführungszeit auflisten
Verwenden Sie den Befehl gcloud firestore operations list, um Vorgänge mit langer Ausführungszeit aufzulisten. Dieser Befehl listet laufende und kürzlich abgeschlossene Vorgänge auf.
Die Vorgänge sind nach Abschluss einige Tage lang in der Liste enthalten:
gcloud firestore operations list
Vorgangsstatus prüfen
Anstelle aller Vorgänge mit langer Ausführungszeit können Sie auch die Details eines einzelnen Vorgangs auflisten:
gcloud firestore operations describe operation-name
Fertigstellungszeit schätzen
Während der Ausführung eines Vorgangs wird im Feld state der Gesamtstatus des Vorgangs angezeigt.
Eine Anfrage für den Status eines Vorgangs mit langer Ausführungszeit gibt auch die Messwerte workEstimated und workCompleted zurück. workEstimated gibt die geschätzte Gesamtzahl der Dokumente an, die bei einem Vorgang verarbeitet werden. workCompleted gibt die Anzahl der bisher verarbeiteten Dokumente an. Nach Abschluss des Vorgangs gibt workCompleted die Gesamtzahl der tatsächlich verarbeiteten Dokumente wieder, die sich vom Wert von workEstimated unterscheiden können.
Wenn Sie den Fortschritt eines Vorgangs schätzen möchten, teilen Sie workCompleted durch workEstimated.
Hier sehen Sie ein Beispiel für den Fortschritt beim Erstellen eines Index:
{
"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"
}
},
},
...
Wenn ein Vorgang abgeschlossen ist, enthält die Vorgangsbeschreibung "done": true. Der Wert des Feldes state stellt das Ergebnis des Vorgangs dar. Wenn das Feld done in der Antwort nicht festgelegt ist, ist der Vorgang nicht abgeschlossen.