Elasticsearch 2.3.0 und 2.2.2 veröffentlicht
Wir freuen uns, die Veröffentlichung der neuen Version 2.3.0 von Elasticsearch auf Basis von Lucene 5.5.0 bekanntgeben zu können. Darüber hinaus veröffentlichen wir zwecks Fehlerbehebung die Version Elasticsearch 2.2.2 auf Basis von Lucene 5.4.1. Beide neuen Versionen sind bereits auf Elastic Cloud verfügbar, unserer Plattform für Elasticsearch-as-a-Service. Der Reigen neuer Programmversionen dieser Woche umfasst zudem neue Versionen von Kibana, Logstash und Beats.
Weitere Informationen gibt es unter folgenden Links:
Bug-Fixes in 2.2:
Elasticsearch 2.3.0 bietet drei der am häufigsten gewünschten Funktionen in der Geschichte von Elasticsearch: di Reindex-API, die update-by-query API und die Task-Management-API. Dazu kommt obendrein die Funktion Deprecation Logging, damit ihr euch auf Elasticsearch 5.0 vorbereiten könnt.
Wer eine Zeitlang mit Elasticsearch gearbeitet hat, weiß, dass die Möglichkeit zum Neuindizieren der Daten von grundlegender Bedeutung ist. Egal ob ihr eure Field-Mappings verbessern, zwecks besserer Suchergebnisse die Verknüpfungen analysieren oder alte Daten neu indizieren müsst, um verbesserte Datenstrukturen zu nutzen wie zum Beispiel die neuen Geo-Points in Elasticsearchn 2.2.0: Die Neuindizierung der Daten soll ein einfacher Vorgang sein. Möglich war das schon lange, indem ihr die Scroll-
und Bulk-
APIs verwendetet, doch mit 2.3.0 wird das Neuindizieren nun viel einfacher.
Die neue _reindex
API reindiziert alle Dokumente im Index in einen neuen Index und braucht dazu nur einen einzigen Befehl:
POST _reindex { "source": { "index": "my_old_index" }, "dest": { "index": "my_new_index" } }
Die Dokumente können aus einem oder mehreren Indizes stammen und sich auf eine Teilmenge von Dokumenten beschränken, welche einer Query entsprechen. Dokumente können im Zuge der Neuindizierung anhand eines Scripts umgewandelt werden, das sogar Zugriff auf die Metadaten des Dokuments hat, wie etwa _id
und _type
.
Elasticsearch 2.3.0 umfasst die erste Version der Reindex-API, doch wir planen bereits künftige Verbesserungen wie dynamisches Drosseln, Inplace-Neuindizierung, Neuindizierung entfernter Cluster u. a.
Ein positiver Nebeneffekt der Hinzunahme der Reindex-API ist, dass wir kostenlos die Update-by-Query-API bekommen. Die Update-By-Query-API ermöglicht das Aktualisieren per Script all derjenigen Dokumente, die der Query entsprechen. Selbst ohne Script ist die API nützlich: Nach dem Hinzufügen eines Multifeld kann eine leere Update-by-Query-Anfrage verwendet werden, um für alle bereits im Index stehenden Dokumente die Werte für das Multifeld aufzufüllen.
Näheres zu den Reindex- und Update-by-Query-APIs erfahrt ihr in diesem Blog Post.
Die Neuindizierung von Terabytes an Daten kann lange dauern. Und was ihr unbedingt vermeiden wollt, ist das Starten einer Neuindizierung, um dann festzustellen, dass euch ein Fehler unterlaufen ist – und ihr den Prozess nicht stoppen könnt. Daher war es wichtig, die Möglichkeit zum Überwachen und Abbrechen langwieriger Arbeitsvorgänge zu schaffen, um die Neuindizierungs-Funktion wirklich sicher zu machen.
Die neue Task-Management-API ermöglicht euch das Abrufen des Status einer laufenden Neuindizierung – und ihr könnt diese sogar abbrechen. Die API liefert nicht nur Berichte zu langwierigen Arbeitsvorgängen, sondern sie spezifiziert darüber hinaus alle im Cluster ausgeführten Aufgaben wie Suchen, Inizierungsqueries, Shard-Zuweisung usw. Später sehen wir uns langwierige Arbeitsvorgänge näher an, darunter etwa Snapshot, sowie Restore und Delete-by-Query, um die Möglichkeiten der Task-Management-API optimal zu nutzen.
Nähere Informationen findet ihr in der Dokumentation zur Task-Management-API.
Es kann schwierig herauszufinden sein, ob ihr veraltete Funktionen benutzt, die in der nächsten Hauptversion verschwinden werden. In 2.0 haben wir Filter mit Queries und veralteten Queries zusammengeführt, darunter die filtered
Query sowie and
und or
Filter; doch diese Konstrukte waren über die gesamte Programmserie 2.x hinweg aktiv. In der Version 5.0 werden diese nun neben weiteren veralteten Funktionen entfernt.
Damit ihr herausfinden könnt, ob ihr irgendwo in eurer Anwendung veraltete Konstrukte verwendet, aktiviert das Deprecation-Logging mit dem folgenden Aufruf für ein Cluster-Einstellungs-Update:
PUT _cluster/settings { "transient": { "logger.deprecation": "DEBUG" } }
Elasticsearch protokolliert alle Verwendungen veralteter Funktionen (die von uns abgedeckt werden) im Log-Verzeichnis in der Datei elasticsearch_deprecation.log.
Zum Deaktivieren des Loggins stellt ihr logger.deprecation
wieder zurück auf INFO
.
Ladet Elasticsearch 2.3.0 herunter, testet es und hinterlasst uns eure Meinung auf Twitter (@elastic) oder in unserem Forum. Jegliche Probleme aller Art sollten auf der GitHub Issues-Seite gemeldet werden.