wake-up-neo.com

Elasticsearch Bulk API - Index vs Erstellen / Aktualisieren

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?

36
Kong

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.

60
Val

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.

8

Sie können den Index nicht für alles verwenden. Nach dem docs :

index fügt ein Dokument nach Bedarf hinzu oder ersetzt es

Wenn Sie ein Dokument aktualisieren, kann es sich auch lohnen, das Flag 'doc_as_upsert' hinzuzufügen. Weitere Infos hier und hier

4
Suhas K