Ich verwende die Elasticsearch Bulk API , um Dokumente zu erstellen oder zu aktualisieren.
Ich weiß tatsächlich, ob sie erstellt oder aktualisiert werden, aber ich kann meinen Code vereinfachen, indem ich sie alle index
oder "Upserts" im Sinne von SQL mache.
Gibt es einen Nachteil, wenn Sie index
verwenden (und ES es herausfinden lassen), anstatt die expliziteren create
und update
zu verwenden?
Wenn Sie create
senden, müssen Sie sicherstellen, dass das Dokument noch nicht in Ihrem Index vorhanden ist. Andernfalls schlägt der Aufruf fehl, wohingegen das Senden desselben Dokuments mit index
immer erfolgreich ist.
Wenn Sie dann aus Leistungsgründen wissen, dass Sie ein Dokument erstellen (entweder mit create
oder index
) und dann nur einige Eigenschaften aktualisieren und dann update
könnte Sinn machen.
Andernfalls würde ich, wenn Sie immer vollständige Dokumente senden, die ganze Zeit index
zum Erstellen und Aktualisieren verwenden. Wenn eine Aktion index
angezeigt wird, erstellt ES das Dokument entweder, wenn es nicht vorhanden ist, oder ersetzt es, wenn es vorhanden ist. Der Aufruf ist jedoch immer erfolgreich.
Die kurze Antwort: Nein, es gibt keinen Nachteil.
Der Erstellungs- und Aktualisierungsendpunkt sind Sonderfälle. Mit create möchten Sie nichts tun, wenn das Dokument bereits vorhanden ist. Mit update können Sie weniger Daten bereitstellen, wenn Sie nicht über alle Daten des Dokuments verfügen. Fügen Sie einfach einige Felder hinzu. Sie können auch sicherstellen, dass das Dokument nur indiziert wird, wenn es bei der Aktualisierung bereits vorhanden ist.