Aktualisieren eines Feldes in allen Datensätzen in elasticsearch

8

Ich bin neu bei ElasticSearch, also ist das wahrscheinlich etwas ziemlich Triviales, aber ich habe nichts besseres herausgefunden, was alles abholt, mit einem Skript verarbeitet und die Register einzeln aktualisiert.

Ich möchte etwas wie ein einfaches SQL-Update machen:

%Vor%

Meine Absicht ist es, die tatsächlichen gefälschten Daten durch einige Daten zu ersetzen, die mehr Sinn ergeben (so dass der Ausdruck im Wesentlichen zufällig aus einem Pool gültiger Werte ausgewählt wird).

    
fortran 11.04.2013, 10:39
quelle

1 Antwort

14

Es gibt ein paar öffnen Probleme über die Möglichkeit, Dokumente per Abfrage zu aktualisieren.

Die technische Herausforderung ist, dass Lucene (die Textsuchmaschinenbibliothek, die elasticsearch unter der Haube verwendet) Segmente nur gelesen werden. Sie können ein vorhandenes Dokument niemals ändern. Was Sie tun müssen, ist die alte Version des Dokuments zu löschen (die übrigens nur als gelöscht markiert wird, bis eine Segmentzusammenführung erfolgt) und die neue Version zu indizieren. Das ist es, was die bestehende Aktualisierung api tut. Daher kann ein Update per Abfrage sehr lange dauern und zu Problemen führen, weshalb es noch nicht veröffentlicht wurde. Ein Mechanismus, der es ermöglicht, laufende Abfragen zu unterbrechen, wäre auch für diesen Fall eine gute Idee.

Aber es gibt das Update per Abfrage-Plugin , das genau diese Funktion verfügbar macht. Achten Sie nur auf die potenziellen Risiken, bevor Sie es verwenden.

    
javanna 11.04.2013, 12:21
quelle

Tags und Links