Die Arbeit mit Indizes in OpenSearch ist ein dynamischer Prozess. Häufig ergeben sich im Laufe der Zeit Anforderungen, bestehende Indizes anzupassen oder umzustrukturieren. Beispielsweise möchten Sie vielleicht ein neues Feld zu allen Dokumenten hinzufügen oder mehrere Indizes zu einem neuen zusammenführen. Für solche umfangreichen Änderungen bietet OpenSearch die Reindexierung als leistungsfähiges Werkzeug an.
Bei der Reindexierung handelt es sich um einen Prozess, bei dem Dokumente von einem Quellindex in einen Zielindex kopiert werden. Dies ermöglicht es Ihnen, Ihre Daten umzustrukturieren, ohne den ursprünglichen Index löschen und alle Daten neu indexieren zu müssen. Die Reindexierung erfolgt über einen POST-Request an den _reindex-Endpunkt.
Stellen Sie sich vor, Sie betreiben einen Online-Shop und speichern Ihre Produktdaten in einem Index “products”. Nach einiger Zeit möchten Sie die Produktbeschreibungen um ein neues Feld “sustainability_score” erweitern. Anstatt den kompletten Index zu löschen und neu aufzubauen, können Sie die Reindexierung nutzen.
Hier ein praktisches Beispiel für eine einfache Reindexierung:
POST _reindex
{
"source": {
"index": "products"
},
"dest": {
"index": "products_v2"
}
}
Vor der Reindexierung sollten Sie den Zielindex mit den gewünschten Mappings und Einstellungen erstellen. Dies könnte so aussehen:
PUT products_v2
{
"mappings": {
"properties": {
"name": { "type": "text" },
"description": { "type": "text" },
"price": { "type": "float" },
"sustainability_score": { "type": "integer" }
}
},
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
Ein wichtiger Performanz-Tipp: Während der Reindexierung empfiehlt es sich, die Anzahl der Replika-Shards im Zielindex auf 0 zu setzen und erst nach Abschluss des Prozesses wieder zu erhöhen. Dies beschleunigt den Vorgang erheblich, da keine Replikation während der Reindexierung stattfinden muss.
In der Praxis möchten Sie häufig nicht alle Dokumente reindexieren, sondern nur eine bestimmte Teilmenge. Nehmen wir an, Sie möchten in unserem Online-Shop-Beispiel nur Produkte einer bestimmten Kategorie in den neuen Index übernehmen:
POST _reindex
{
"source": {
"index": "products",
"query": {
"match": {
"category": "electronics"
}
}
},
"dest": {
"index": "electronics_products"
}
}
Eine besonders leistungsfähige Funktion ist die Möglichkeit, Dokumente während der Reindexierung zu transformieren. Dies erfolgt mittels Painless-Skripten oder Ingest-Pipelines.
Bleiben wir beim Online-Shop-Beispiel: Angenommen, Sie möchten den Nachhaltigkeitsscore für alle Produkte basierend auf verschiedenen Faktoren berechnen:
POST _reindex
{
"source": {
"index": "products"
},
"dest": {
"index": "products_v2"
},
"script": {
"lang": "painless",
"source": """
ctx._source.sustainability_score =
(ctx._source.recycled_packaging ? 2 : 0) +
(ctx._source.energy_efficiency > 80 ? 3 : 1) +
(ctx._source.local_production ? 2 : 0)
"""
}
}
In verteilten Umgebungen ist es manchmal erforderlich, Daten zwischen verschiedenen OpenSearch-Clustern zu übertragen. Die Reindexierung unterstützt auch diese Anforderung. Ein typisches Szenario wäre die Zusammenführung von Daten aus verschiedenen regionalen Clustern in einen zentralen Analyse-Cluster:
POST _reindex
{
"source": {
"remote": {
"host": "https://europe-cluster.example.com:9200",
"username": "sync_user",
"password": "secure_password"
},
"index": "sales_europe"
},
"dest": {
"index": "global_sales"
}
}
Beachten Sie bei Remote-Reindexierung die Timeout-Einstellungen. Bei großen Datenmengen oder langsamen Netzwerkverbindungen müssen diese eventuell angepasst werden.
Lassen Sie uns das Gelernte in einer praktischen Übung anwenden. Erstellen Sie zunächst einen Index “customers_v1” mit grundlegenden Kundeninformationen:
PUT customers_v1
{
"mappings": {
"properties": {
"name": { "type": "text" },
"email": { "type": "keyword" },
"registration_date": { "type": "date" }
}
}
}
Fügen Sie einige Testdaten hinzu und erstellen Sie dann einen neuen Index “customers_v2”, der zusätzlich die Kaufhistorie der letzten 12 Monate berücksichtigt. Entwickeln Sie ein Reindexierungs-Skript, das:
Diese praktische Übung vermittelt Ihnen wichtige Fähigkeiten für die Arbeit mit Reindexierung in realen Szenarien.
Abschließend noch einige wichtige Best Practices für die Reindexierung:
Ein sorgfältiges Mapping des Zielindex ist entscheidend für den Erfolg der Reindexierung. Planen Sie die neue Struktur gut durch und testen Sie die Reindexierung zunächst mit einer kleinen Datenmenge.
Bei großen Datenmengen sollten Sie die Reindexierung außerhalb der Hauptgeschäftszeiten durchführen. Nutzen Sie die Option “max_docs”, um die Anzahl der pro Durchgang verarbeiteten Dokumente zu begrenzen und die Systemlast zu kontrollieren.
Dokumentieren Sie Ihre Reindexierungsprozesse sorgfältig, insbesondere die verwendeten Transformationen und Skripte. Dies erleichtert spätere Anpassungen und hilft bei der Fehlersuche.
Durch die Kombination dieser Konzepte und Best Practices können Sie Reindexierung effektiv für die Evolution Ihrer OpenSearch-Infrastruktur nutzen.