2016-03-02 8 views
5

Ich verwende jetzt Google Datastore für die Datenbank meines Unternehmens. Heute habe ich einen Index gemacht und es erfolgreich in "Index" aufgeführt. Aber die Größe und Entitäten des Index, die ich gemacht habe, ist leer.Wie fügt man einen zusammengesetzten Index in Google Datastore hinzu?

Die Dokumentation von Google Datastore sagt, dass der Index automatisch generiert wird, aber es war nicht.

Gibt es einen Befehl oder etwas zu tun, um den Index zu generieren?

Das Bild unten ist ein Screenshot.

Die obere ist die neue. Der untere wird bereits verwendet.

enter image description here

+1

Hallo und Willkommen zu StackOverflow, Ich habe Ihre Frage ein wenig bearbeitet, um das Bild direkt in die Frage zu bringen und einige der Rechtschreibung aufgeklärt. Wenn Sie der Meinung sind, dass ich die Bedeutung Ihres Beitrags unfair geändert habe, antworten Sie auf diesen Kommentar und pingen Sie mich mit @ Magisch

+0

@Magisch Vielen Dank für Ihre Freundlichkeit. Was du getan hast, ist was ich wollte. :) –

Antwort

6

als eine Angelegenheit der Tatsache, bestehende Einheiten werden nicht automatisch indiziert werden. Sie müssen alle alten Entitäten (ohne Index) laden und speichern, damit die erforderlichen Indizes für diese Entitäten erstellt werden können.

Beachten Sie jedoch, dass in indiziert eine Eigenschaft aus unindexed ändert sich keine vorhandenen Einheiten betreffen, die vor der Änderung erstellt wurden. Abfragen, die für die Eigenschaft filtern, geben solche vorhandenen Entitäten nicht zurück, weil die Entitäten nicht in den Index der Abfrage geschrieben wurden, als sie erstellt wurden. Um die Entitäten über zukünftige Abfragen zugänglich zu machen, müssen Sie sie in den Datenspeicher umschreiben, sodass sie in die entsprechenden Indizes eingegeben werden. Das heißt, Sie müssen für jede solche vorhandene Entität ausführen:

Abrufen (abrufen) der Entität aus dem Datenspeicher. Schreiben Sie die Entität zurück an den Datenspeicher. Entsprechend wirkt sich das Ändern einer Eigenschaft von indiziert auf nicht indiziert nur auf Entitäten aus, die anschließend in den Datenspeicher geschrieben werden. Die Indexeinträge für vorhandene Entitäten mit dieser Eigenschaft werden weiterhin bestehen, bis die Entitäten aktualisiert oder gelöscht werden. Um unerwünschte Ergebnisse zu vermeiden, müssen Sie Ihren Code aller Abfragen löschen, die filtern oder nach der (jetzt nicht indizierten) Eigenschaft sortieren. (source)

Beachten Sie, dass die Dokumentation für zusammengesetzte Indizes nicht explizit dasselbe sagt. Wenn Sie einen neuen zusammengesetzten Index bereitstellen, wird der Index in der Entwicklerkonsole als "building" angezeigt, bis er den Status "serving" erreicht. Ich bin mir nicht sicher, was genau dort gebaut wird, ich habe normalerweise alle meine Entitäten wieder gespeichert, und alles hat funktioniert, wie es sollte.

automatisch generiert ist ein Schlüsselwort, das Ihnen sagt, ob Sie diesen Index manuell erstellt haben oder ob er vom Dev-Server erstellt wurde, als Sie eine Abfrage erstellt haben, die diesen Index benötigt. Dies ist in keiner Weise damit verbunden, wie und wann die Indizes für die Entitäten erstellt werden.

<datastore-indexes> Das Element hat ein Attribut, das automatisch generieren steuert, ob in dieser Datei zusammen mit automatisch generierten Indexkonfiguration berücksichtigt werden. Siehe Verwenden des automatischen Index Konfiguration unten.(source)

Als Sie einen neuen Index, und Sie möchten diesen Index für alle vorhandenen Einheiten empfehle ich Ihnen, einen Cursor-Abfrage erstellen, dies zu umgehen. Normalerweise stelle ich diese Abfrage in einem Admin-Backend zur Verfügung und lasse die Abfrage laufen, bis keine Ergebnisse mehr vorhanden sind. Warum das Ding aussetzen? Wenn Sie viele Entitäten haben, kann dieser Job länger als die erlaubten 60 Sekunden im Frontend oder 10 Minuten im Backend laufen. Dadurch kann ich die Front-End-Instanz nutzen und muss mich nicht um die zeitlichen Einschränkungen kümmern.

Verwandte Themen