Der ultimative Leitfaden zur Verwaltung von Elasticsearch-Indizes über API-Befehle

Meistern Sie die Elasticsearch-Indexverwaltung mit diesem ultimativen Leitfaden zu API-Befehlen. Erfahren Sie, wie Sie Indizes mit benutzerdefinierten Zuordnungen und Einstellungen akribisch mit `PUT` erstellen, deren Konfigurationen und Details umfassend mit `GET` anzeigen und nicht mehr benötigte Indizes sicher mit `DELETE` löschen. Dieser Artikel bietet praktische Beispiele, Best Practices und wichtige Warnhinweise, damit Sie den Lebenszyklus Ihrer Daten innerhalb von Elasticsearch für optimale Leistung und Ressourcenverwaltung effektiv steuern können.

42 Aufrufe

Der ultimative Leitfaden zur Verwaltung von Elasticsearch-Indizes über API-Befehle

Elasticsearch ist eine leistungsstarke, verteilte Such- und Analyse-Engine, die Daten in Indizes organisiert. Ein Index ist im Wesentlichen ein logischer Namensraum, der auf einen oder mehrere physische Shards verweist, in denen Ihre Dokumente gespeichert sind. Die effektive Verwaltung dieser Indizes ist grundlegend für die Aufrechterhaltung eines gesunden, performanten und skalierbaren Elasticsearch-Clusters. Dieser Leitfaden führt Sie durch die wesentlichen API-Befehle für die Indexlebenszyklusverwaltung, mit denen Sie Indizes sicher erstellen, inspizieren und löschen können.

Eine effiziente Indexverwaltung ist aus mehreren Gründen von entscheidender Bedeutung: Sie ermöglicht es Ihnen zu definieren, wie Ihre Daten gespeichert und durchsucht werden, die Leistung durch Konfiguration von Einstellungen wie Shards und Replikaten zu optimieren und den Speicherplatz zu verwalten, indem veraltete oder unnötige Daten entfernt werden. Die Beherrschung dieser Befehle ist eine Schlüsselqualifikation für jeden Elasticsearch-Administrator oder -Entwickler, um sicherzustellen, dass Ihre Dateninfrastruktur robust und agil bleibt.

Verständnis von Elasticsearch-Indizes

Bevor wir uns mit den API-Befehlen befassen, ist es wichtig zu verstehen, was ein Elasticsearch-Index ist. Vereinfacht ausgedrückt, ist ein Index wie eine Datenbank in einem relationalen Datenbankverwaltungssystem. Er ist eine Sammlung von Dokumenten mit ähnlichen Merkmalen und oft einem gemeinsamen Zweck. Jedes Dokument innerhalb eines Index hat einen Typ (obwohl in neueren Elasticsearch-Versionen ein einzelner Index typischerweise einen einzelnen Typ darstellt, oft _doc) und eine eindeutige ID. Indizes bestehen aus einem oder mehreren Shards, bei denen es sich um in sich geschlossene, niedrigstufige Lucene-Indizes handelt. Diese Shards können über mehrere Knoten verteilt werden, was Skalierbarkeit und Fehlertoleranz bietet.

Zu den Schlüsselkomponenten eines Index gehören:
* Mappings (Abbildungen): Definieren das Schema für die Dokumente innerhalb eines Index und geben Feldnamen, Datentypen (z. B. text, keyword, date, integer) und deren Indizierungsweise an.
* Settings (Einstellungen): Konfigurieren verschiedene betriebliche Aspekte wie die Anzahl der primären Shards, der Replikats-Shards, der Aktualisierungsintervalle und der Analyse-Einstellungen.
* Aliases (Aliase): Virtuelle Namen, die auf einen oder mehrere Indizes verweisen können und Anwendungen Flexibilität bei der Interaktion mit Indizes bieten, ohne deren tatsächliche Namen kennen zu müssen.

Erstellen von Elasticsearch-Indizes

Das Erstellen eines Index ist der erste Schritt zum Speichern von Daten in Elasticsearch. Sie können einen Index mit Standardeinstellungen erstellen oder, was häufiger vorkommt, benutzerdefinierte Mappings und Einstellungen definieren, die auf Ihre Daten- und Suchanforderungen zugeschnitten sind. Die PUT-Methode wird für diesen Zweck verwendet.

Einfache Indexerstellung

Um einen Index mit Standardeinstellungen zu erstellen, senden Sie einfach eine PUT-Anfrage an den gewünschten Indexnamen.

PUT /my_first_index

Nach erfolgreicher Erstellung gibt Elasticsearch eine Bestätigung zurück:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "my_first_index"
}

Dadurch wird standardmäßig ein Index mit einem primären Shard und einem Replikats-Shard erstellt, und das dynamische Mapping ist aktiviert (d. h. Elasticsearch leitet die Feldtypen ab, während Dokumente indiziert werden).

Erstellen von Indizes mit benutzerdefinierten Mappings und Einstellungen

Für mehr Kontrolle können Sie explizite Mappings für Ihre Felder definieren und Indexeinstellungen wie die Anzahl der Shards und Replikate festlegen. Dies ist entscheidend für die Optimierung der Suchleistung und die Gewährleistung der Datenintegrität.

Beispiel: Benutzerdefinierte Mappings und Einstellungen

Erstellen wir einen Index namens products mit spezifischen Feldtypen für Produktdaten und konfigurieren ihn mit 3 primären Shards und 2 Replikats-Shards.

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      },
      "name": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "description": {
        "type": "text"
      },
      "price": {
        "type": "float"
      },
      "stock": {
        "type": "integer"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
      },
      "available": {
        "type": "boolean"
      }
    }
  }
}
  • settings: Definiert Cluster-weite Konfigurationen für den Index. Hier legen wir number_of_shards und number_of_replicas fest.
  • mappings: Enthält die Schema-Definition. Wir definieren properties für jedes Feld:
    • product_id: Typ keyword für exakte Übereinstimmung.
    • name: Typ text für Volltextsuche, mit einem zusätzlichen keyword-Unterfeld (name.raw) für exaktes Sortieren oder Aggregationen.
    • description: Typ text für Volltextsuche.
    • price: Typ float für numerische Operationen.
    • stock: Typ integer für numerische Operationen.
    • created_at: Typ date mit angegebenen Formaten, um eine korrekte Analyse sicherzustellen.
    • available: Typ boolean für Wahr/Falsch-Werte.

Tipp: Planen Sie Ihre Mappings sorgfältig. Sobald ein Index erstellt und gefüllt ist, ist das Ändern des Datentyps eines vorhandenen Feldes ohne Neuindizierung Ihrer Daten nicht direkt möglich. Planen Sie Ihre Datentypen und Analyseanforderungen im Voraus.

Anzeigen von Indexdetails und -einstellungen

Nach der Erstellung eines Index müssen Sie häufig dessen Konfiguration überprüfen, um Einstellungen zu bestätigen, Mappings zu verifizieren oder Probleme zu beheben. Der GET-Befehl ist Ihr primäres Werkzeug zum Abrufen umfassender Informationen über einen Index.

Abrufen aller Indexinformationen

Um alle Einstellungen, Mappings, Aliase und andere Metadaten für einen bestimmten Index abzurufen, verwenden Sie den GET-Befehl mit dem Indexnamen.

GET /products

Dies gibt ein großes JSON-Objekt mit detaillierten Informationen zurück, darunter:

{
  "products": {
    "aliases": {},
    "mappings": {
      "properties": {
        "available": {
          "type": "boolean"
        },
        "created_at": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
        },
        "description": {
          "type": "text"
        },
        "name": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "float"
        },
        "product_id": {
          "type": "keyword"
        },
        "stock": {
          "type": "integer"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "3",
        "provided_name": "products",
        "creation_date": "1701234567890",
        "number_of_replicas": "2",
        "uuid": "some_uuid",
        "version": {
          "created": "7170099"
        }
      }
    }
  }
}

Abrufen spezifischer Indexinformationen

Sie können nur bestimmte Teile der Konfiguration eines Index abrufen, indem Sie diese an die URL anhängen.

  • Nur Mappings abrufen:
    bash GET /products/_mapping

  • Nur Einstellungen abrufen:
    bash GET /products/_settings

  • Nur Aliase abrufen:
    bash GET /products/_alias

Diese fokussierte Abfrage ist nützlich, wenn Sie nur an einem bestimmten Aspekt eines Index interessiert sind, wodurch die Ausgabe übersichtlicher wird.

Anzeigen mehrerer Indizes

Sie können auch Informationen für mehrere Indizes abrufen, indem Sie deren Namen durch Kommas trennen oder Wildcards verwenden.

  • Spezifische mehrere Indizes:
    bash GET /products,my_first_index/_settings

  • Alle Indizes, die mit 'p' beginnen:
    bash GET /p*/_mapping

  • Alle Indizes (mit Vorsicht in Produktionsumgebungen verwenden):
    bash GET /_all # oder GET /*

Hinweis: Wenn Sie GET /_all oder GET /* verwenden, seien Sie auf eine potenziell sehr große Antwort vorbereitet, wenn Ihr Cluster viele Indizes hat. Verwenden Sie dies sparsam, insbesondere in Produktionsumgebungen.

Löschen von Elasticsearch-Indizes

Das Löschen eines Index ist ein permanenter Vorgang, der alle damit verbundenen Dokumente und Metadaten entfernt. Dies geschieht typischerweise, um Speicherplatz freizugeben, alte Daten zu entfernen oder Testindizes zu bereinigen. Die DELETE-Methode wird für diesen kritischen Vorgang verwendet.

Löschen eines einzelnen Index

Um einen einzelnen Index zu löschen, verwenden Sie den DELETE-Befehl gefolgt vom Indexnamen.

DELETE /my_first_index

Eine erfolgreiche Löschung gibt zurück:

{
  "acknowledged": true
}

Warnung: Diese Aktion ist nicht umkehrbar. Sobald ein Index gelöscht wurde, sind seine Daten für immer verloren, es sei denn, Sie haben ein Snapshot oder ein Backup. Überprüfen Sie immer den Indexnamen, bevor Sie einen DELETE-Befehl ausführen, insbesondere in Produktionsumgebungen.

Löschen mehrerer Indizes

Ähnlich wie bei GET können Sie mehrere Indizes löschen, indem Sie diese in einer durch Kommas getrennten Liste angeben oder Wildcards verwenden.

  • Löschen spezifischer mehrerer Indizes:
    bash DELETE /my_old_index_1,my_old_index_2

  • Löschen aller Indizes, die einem Muster entsprechen:
    bash DELETE /logstash-2023-*
    Dieser Befehl würde alle Indizes löschen, deren Namen mit logstash-2023- beginnen.

  • Löschen aller Indizes (äußerste Vorsicht!):
    bash DELETE /_all # oder DELETE /*

    Gefahr! Das Löschen von _all oder * entfernt jeden einzelnen Index aus Ihrem Cluster. Dies ist ein extrem destruktiver Vorgang und sollte niemals in einer Produktionsumgebung ausgeführt werden, es sei denn, Sie beabsichtigen ausdrücklich, Ihren gesamten Cluster zu leeren, und verfügen über einen robusten Wiederherstellungsplan. Viele Produktionscluster deaktivieren diese Funktionalität, um versehentlichen Datenverlust zu verhindern.

Best Practices für das Löschen

  • Immer überprüfen: Überprüfen Sie vor dem Löschen den Index (oder die Indizes über Wildcard), den Sie löschen möchten, mit GET. Dies bestätigt, dass Sie auf die richtigen Daten abzielen.
    bash GET /logstash-2023-*
    Überprüfen Sie die Ausgabe, und wenn sie Ihren Erwartungen entspricht, fahren Sie mit DELETE fort.
  • Berechtigungen: Stellen Sie sicher, dass der Benutzer oder die Rolle, die den DELETE-Befehl ausführt, über die erforderlichen Berechtigungen verfügt. In einer Produktionsumgebung sollten DELETE-Berechtigungen nur autorisiertem Personal vorbehalten sein.
  • Snapshots: Erstellen Sie immer einen Snapshot Ihres Clusters, bevor Sie großflächige Löschungen durchführen, insbesondere wenn die Daten kritisch sind.

Vergleich und Lebenszyklusverwaltung

Diese drei Befehle (PUT zum Erstellen, GET zur Inspektion, DELETE zum Entfernen) bilden das Rückgrat der manuellen Indexlebenszyklusverwaltung. Sie werden in verschiedenen Phasen verwendet:

  • Erstellung (PUT): Zu Beginn des Lebenszyklus eines Index, Definition seiner Struktur und anfänglichen Konfiguration.
  • Inspektion (GET): Während des aktiven Lebenszyklus eines Index zur Überwachung, Fehlerbehebung und Verifizierung.
  • Löschung (DELETE): Am Ende der Nutzungsdauer eines Index, um Ressourcen freizugeben und Datenaufbewahrungsrichtlinien zu verwalten.

Obwohl diese Befehle hervorragend für Ad-hoc- oder programmatische Verwaltung geeignet sind, bietet Elasticsearch auch leistungsstarke Funktionen für die automatisierte Indexlebenszyklusverwaltung (ILM). ILM-Richtlinien ermöglichen es Ihnen, Regeln zu definieren, um Indizes automatisch durch Phasen (Hot, Warm, Cold, Delete) zu verschieben, basierend auf Alter, Größe oder anderen Kriterien, einschließlich Operationen wie Shrinking, Force Merging und schließlich Löschen. Für die groß angelegte oder langfristige Datenaufbewahrung ist ILM der empfohlene Ansatz zur Automatisierung der DELETE-Phase.

Fazit

Die Verwaltung von Elasticsearch-Indizes über API-Befehle ist eine unverzichtbare Fähigkeit für alle, die mit der Plattform arbeiten. Sie haben gelernt, wie man Indizes mit präzisen Mappings und Einstellungen unter Verwendung von PUT erstellt, deren Konfigurationen gründlich mit GET überprüft und sie sicher mit DELETE entfernt. Durch das Verständnis und die korrekte Anwendung dieser Befehle erhalten Sie eine granulare Kontrolle über Ihre Datenspeicherung und können sicherstellen, dass Ihr Elasticsearch-Cluster effizient, gut organisiert und performant bleibt.

Denken Sie immer an die Bedeutung einer sorgfältigen Planung der Mappings, einer gewissenhaften Überprüfung vor dem Löschen und der Nutzung der integrierten Elasticsearch-Funktionen wie ILM für eine fortgeschrittene, automatisierte Lebenszyklusverwaltung. Mit diesen Tools und Best Practices sind Sie gut gerüstet, um die Elasticsearch-Indexadministration zu meistern. Für weitere Erkundungen tauchen Sie ein in erweiterte Mapping-Optionen, Indexvorlagen und die volle Leistungsfähigkeit der Indexlebenszyklusverwaltungsrichtlinien von Elasticsearch.