Wie aktualisiere ich mehrere Elemente in ElasticSearch?

7

Nehmen wir an, ich habe einen tag -Typ in einem ElasticSearch-Index mit folgender Zuordnung:

%Vor%

Jeder Eintrag ist ein Tag und ein Array von Aliasen für dieses Tag. Hier ist ein Beispiel:

%Vor%

Von Zeit zu Zeit möchte ich neue Tag-Wörter mit ihren Aliasen hinzufügen und zu vorhandenen Tag-Wörtern neue Aliase hinzufügen.

Das Hinzufügen neuer Schlagworte mit ihren Aliasen ist einfach, es ist nur ein neues Dokument. Wie kann ich jedoch bestehende Aliase zu bestehenden Tag-Wörtern auf vernünftige Weise hinzufügen?

Ich weiß, dass ich einfach nach dem Tag-Wort suchen, sein Dokument abrufen, suchen kann, ob der Alias ​​bereits im Alias-Array existiert, wenn nicht, und dann speichern. Jedoch - das klingt nicht wie eine gute Lösung.

Gibt es eine Möglichkeit, ein Bulk-Update durchzuführen?

    
Doron 17.04.2012, 09:56
quelle

8 Antworten

7

Der zu Grunde liegende Elasticsearch-Speicher, Lucene, hat keine Aktualisierungsoperation. Daher werden alle Aktualisierungen durch Auffinden des Datensatzes, Löschen der alten Version und Hinzufügen der neuen Version durchgeführt. In elasticsearch können Sie mit der Update-API . Es würde jedoch immer noch erforderlich sein, den Rekord zu finden. Was Sie wahrscheinlich wollen, ist Update per Abfrage , aber leider ist es noch nicht implementiert.

    
imotov 17.04.2012 13:16
quelle
7

Versuchen Sie es mit _bulk :

%Vor%     
Varshaan 08.06.2015 11:16
quelle
2

Elastic Search hat eine Update-API . Mit dieser API können Sie Folgendes tun:

%Vor%     
Eric Vidal 09.04.2013 15:50
quelle
2

Das funktioniert für mich.

input_list.dat:

%Vor%

Befehl:

%Vor%     
Rockoder 21.01.2016 01:50
quelle
1

Elasticsearch 2.3.0 hat die Update-by-Query-API Reindex API .

Als Beispiel können Sie hier alle Dokumente aktualisieren, um ein bestimmtes Feld zu löschen, falls es existiert:

%Vor%

Im obigen Beispiel wird Inline-Skripting verwendet. Stellen Sie sicher, dass Sie es in elasticsearch.yml mit script.inline: on aktivieren.

    
PhaedrusTheGreek 06.05.2016 17:23
quelle
0

Auch wenn Sie denselben Wert mit derselben ID hinzufügen, werden ältere Daten automatisch aktualisiert.

    
Mehmet Uyar 01.04.2014 14:04
quelle
0

Die Bulk-APIs von Elasticsearch können auch für Aktualisierungsanforderungen verwendet werden, zumindest für den Java-Client.

%Vor%

Beachten Sie, dass dynamisches Skripting in neueren Versionen von elasticsearch deaktiviert ist. Aktivieren Sie das oder verwenden Sie vorkompilierte Skripts zur Verwendung dieser Funktion.

    
Mohit 14.09.2015 10:32
quelle
0

Sie können dasselbe tun, indem Sie den java-Client mit dem folgenden Code verwenden. Im Folgenden sind die im Code verwendeten Abhängigkeiten aufgeführt.

%Vor%     
ashisahu 10.11.2015 07:46
quelle