2016-10-18 2 views
0

Was passiert, wenn ich die Zuordnung für meinen Index geändert habe und neu indizieren möchte?Elasticsearch Reindexing beim Aktualisieren von Dokumenten?

Ich benutze derzeit die Java-API, die noch nicht die Reindex-Funktionalität hat, so würde die Verwendung von Bulk meine Probleme lösen. So wäre die Lösung in etwa so aussehen

ref How to reindex in ElasticSearch via Java API

Vor langer Zeit

  • create index MY_INDEX_1
  • erstellen Mapping für MY_INDEX_1
  • erstellen alias MY_INDEX_1 -> MY_INDEX
  • Dokumente in MY_INDEX
  • erstellen

Zeit zum Neuindizieren!

  • Liste item
  • Index MY_INDEX_2
  • Mapping für MY_INDEX_2
  • Scroll-Suche + bulk alle Dokumente aus MY_INDEX_1 zu MY_INDEX_2

Umbenennen und Löschen von alten Index

erstellen erstellen
  • alias erstellen MY_INDEX_2 -> MY_INDEX
  • löschen alias MY_INDEX_1 -> MY_INDEX
  • Index MY_INDEX_1

löschen Aber was passiert, während alle Dokumente reindexing, ein Dokument, das von einem aktualisiert am Anfang indexiert wurde Benutzer. Oder das zwischen Reindexing und Umbenennen von Aliasen die oben genannten Happens?

Mögliche Lösungen?

  • Eine Möglichkeit wäre externe Version verwenden, wie es kein Dokument mit einer höheren Version
  • überschreibt Oder könnte es auf eine andere Weise gelöst werden?
  • Oder zwischen dem Umbenennen von Aliasen und dem Löschen von my_index_1 Neuindizieren aller Dokumente, die seit der Neuindizierung indiziert wurden? Aber dann wäre es immer noch so, dass ein Dokument zwischen Aliasnamen umbenennen und neu indiziert wurde
  • Oder sollten wir während der Reindexierung sperren? Es scheint wie eine schlechte Lösung ..

Antwort

0

Ich denke, dies ist Ihre eigentliche Frage ist:

Aber was passiert, während alle Dokumente reindexing, ein Dokument, das am Anfang indexiert wurde von einem Benutzer aktualisiert. Oder das zwischen Reindexing und Umbenennen von Aliasen das oben genannte happpens?

Ich nur asked a question das ist sehr nahe, aber immer noch Fragen, die separat gelöst werden müssen. Meine Forschung erlaubt mir jedoch, diese Frage zu beantworten. Siehe die Frage für Details und Referenzen.

Um Ihre Frage zu beantworten, erstellen Sie einen zweiten Alias ​​kurz vor der Neuindizierung. Ich nenne dies eine duplicate_write_alias und Sie haben Ihre Anwendung, wenn sie diesen zweiten Alias ​​sieht, schreiben Sie zuerst den alten und dann den neuen Index über die zwei Aliase. (Die Reihenfolge ist wichtig, um ein mögliches Rennen zu annullieren). Wenn die Indizierung abgeschlossen ist, löscht Ihr Indizierungsprozess diese duplicate_write_alias und verschiebt Ihren MY_INDEX Alias ​​auf den neuen MY_INDEX_2 wie oben erwähnt. Schalten Sie den Alias ​​in one atomic command um.

Wie ich in meiner Frage angemerkt habe, müssen Sie immer noch mit potentiell 'Index existiert nicht' Fehler wegen eines verbleibenden Wettrennens zwischen Ihrer Anwendung auf das Vorhandensein des Alias ​​und der Alias ​​gelöscht werden. Ich hoffe, es gibt eine bessere Antwort als "immer zweimal schreiben und Fehler ignorieren" oder "überprüfen und auf das Beste hoffen" ...

Verwandte Themen