Was ist ein Elasticsearch-Index?

info-retrieval-blog-720x420-v2.jpeg

Der Begriff Index ist in der Technik ziemlich überstrapaziert. Die meisten Entwickler würden auf die Frage, was ein Index ist, antworten, dass sich der Begriff häufig auf eine Datenstruktur in einer relationalen Datenbank (RDBMS) bezieht, die mit einer Tabelle assoziiert ist, die die Geschwindigkeit von Datenabrufen erhöht.

Aber was ist ein Elasticsearch®-Index? Ein Elasticsearch Index ist ein logischer Namespace, der eine Ansammlung an Dokumenten beinhaltet, wobei jedes Dokument eine Ansammlung an Feldern ist – die wiederum Schlüssel-Wert-Paare sind, die Ihre Daten enthalten.

Wie unterscheidet sich ein Elasticsearch-Index von einer relationalen Datenbank?

Elasticsearch-Indizes sind anders als die in einer relationalen Datenbank. Stellen Sie sich einen Elasticsearch-Cluster als Datenbank vor, die viele Indizes umfassen kann, die Sie sich als Tabelle vorstellen können. Jeder dieser Indizes umfasst viele Dokumente.   

  • RDBMS => Datenbanken => Tabellen => Zeilen/Spalten
  • Elasticsearch => Cluster => Indizes => Shards => Dokumente mit Schlüssel-Wert-Paaren

Obwohl Elasticsearch JSON-Dokumente speichert, ist die Struktur der indexierten Daten unglaublich flexibel. Dank einer Vielzahl an verfügbaren Integrationen und Beats ist das System im Handumdrehen einsatzbereit. Wenn Sie noch einen Schritt weiter gehen möchten, können Sie mithilfe von Ingest Pipelines oder Logstash®– unterstützt durch deren zahlreiche Prozessoren und Plugins – auch ganz eigene ETL-Prozesse definieren.

Ein weiterer Unterschied zu relationalen Datenbanken besteht darin, dass Sie Daten importieren können, ohne vorab ein Schema definieren zu müssen. Dynamische Datentypen eignen sich hervorragend für einen schnellen Einstieg oder um unerwartete Felder in Dokumenten abzufangen. Sobald Ihre Strukturen final feststehen, können Sie zu einem festen Schema wechseln, um die Performance gezielt zu optimieren. 

Laufzeitfelder sind ein weiteres interessantes Feature, das Ihnen ein Schema-on-Read oder Schema-on-Write ermöglicht. Sie können entweder einem bestehenden Dokument hinzugefügt werden, um daraus ein neues Feld abzuleiten, oder direkt zum Abfragezeitpunkt (Query Time) erstellt werden. Man kann sie sich als berechnete Werte vorstellen, die mittels Skripting generiert werden und direkt auf die Datenquelle des Dokuments zugreifen können.

Erleben Sie den Unterschied zwischen Elasticsearch und relationalen Datenbanken jetzt selbst. Testen Sie alle Funktionen noch heute kostenlos mit einem Testzugang auf Elastic Cloud.

Wie Daten mit der benutzerfreundlichen API von Elasticsearch interagieren

Elasticsearch bietet eine JSON-basierte RESTful API für die Interaktion mit Dokumentdaten. Sie können Dokumente indexieren, suchen, aktualisieren und löschen, indem Sie HTTP-Anfragen an die entsprechenden Cluster-Endpunkte senden. Diese CRUD-ähnlichen Operationen können entweder auf der Ebene einzelner Dokumente oder direkt auf Indexebene stattfinden. Falls Sie dies bevorzugen, stehen Ihnen anstelle direkter REST-Aufrufe auch sprachspezifische Client-Bibliotheken zur Verfügung.
Das folgende Beispiel erstellt ein Dokument in einem Index namens playwrights mit der zugewiesenen document_id 1. Wie Sie sehen, müssen wir vorab keine Schemas definieren oder Konfigurationen vornehmen – wir fügen unsere Daten einfach direkt ein.

POST /playwrights/_doc/1
{
  "firstname": "William",
  "lastname": "Shakespeare"
}

Wir können nach Belieben weitere Dokumente und Felder hinzufügen. Mit einer relationalen Datenbank wäre das nicht ohne Weiteres möglich.

POST /playwrights/_doc/2
{
  "firstname": "Samuel",
  "lastname": "Beckett",
  "year_of_birth": 1906
}

Nun können wir alle Dokumente mit dem Suchendpunkt abfragen.

GET /playwrights/_search
{
    "query": {
        "match_all": {}
    }
}

Oder wir können eine Abfrage nach einem spezifischen Geburtsdatum starten.

GET /playwrights/_search
{
    "query": {
        “match": {
            “year_of_birth": 1906
        }
    }
}

Zusätzlich zu grundlegenden Abfragen bietet Elasticsearch erweiterte Suchfunktionen wie Fuzzy Matching, Stemming, Relevanzscoring, Hervorhebungen und Tokenisierung, wobei Text in kleinere Teile heruntergebrochen wird, die Tokens genannt werden. In den meisten Fällen handelt es sich bei diesen Tokens um einzelne Wörter, aber es sind viele verschiedene Tokenizer verfügbar.

Warum sind denormalisierte Daten der Schlüssel zu schnellerem Datenabruf?

In relationalen Datenbanken wird Normalisierung häufig angewendet, um Datenredundanz zu eliminieren und Konsistenz zu gewährleisten. Beispielsweise können Kunden, Produkte und Aufträge in jeweils eigenen Tabellen enthalten sein. 

In Elasticsearch ist Denormalisierung ein gängiger Vorgang. Statt Daten auf mehrere Tabellen zu verteilen, werden alle relevanten Informationen in einem einzelnen JSON-Dokument gespeichert. Ein Dokument für Aufträge enthielte also Kundeninformationen und Produktinformationen, statt im Auftragsdokument fremde Schlüssel zu speichern, die auf separate Indizes für Produkte und Kunden verweisen. So können in Elasticsearch Daten in Suchvorgängen schneller und effizienter abgerufen werden. Als allgemeine Daumenregel kann Speicherplatz günstiger sein als die Kosten für die Rechenleistung zum Zusammenführen von Daten.

Wie stellt Elasticsearch Skalierbarkeit in verteilten Systemen sicher?

Jeder Index wird durch einen eindeutigen Namen identifiziert und ist in ein oder mehrere Shards unterteilt. Dabei handelt es sich um kleinere Teilmengen des Index, die eine parallele Verarbeitung und verteilte Speicherung über ein Cluster von Elasticsearch-Knoten hinweg ermöglichen. Shards werden in primäre Shards und Replika-Shards unterteilt. Replikas stellen redundante Kopien Ihrer Daten bereit, um vor Hardwareausfällen zu schützen und die Kapazität für Leseanfragen wie das Suchen oder Abrufen von Dokumenten zu erhöhen.

Wenn Sie dem Cluster weitere Knoten hinzufügen, erhalten Sie weitere Kapazitäten für Indexierung und Suche. Das ist mit einer relationalen Datenbank aufwendiger.

Wenn wir uns unser Beispiel playwrights von oben noch einmal ansehen, können wir die Typ-Mappings sehen, die Elasticsearch automatisch abgeleitet hat, sowie die Anzahl an Shards und Replikaten, die der Index zugewiesen hat.

GET /playwrights/

Welche Arten von Daten können in Elasticsearch indexiert werden?

Elasticsearch kann viele Arten von Daten indexieren – zunächst einmal Text, aber auch numerische Daten und Geopositionsdaten. Es kann auch dichte Vektoren speichern, die in Ähnlichkeitssuchen verwendet werden. Sehen wir uns diese nacheinander an.

Invertierte Indizes für Textsuche/lexikalische Suche

Elasticsearch wählt zudem die beste zugrunde liegende Datenstruktur für einen bestimmten Feldtyp aus. Beispielsweise wird Text tokenisiert und in einem invertierten Index gespeichert. Das ist eine Struktur, in der jedes eindeutige Token aufgeführt ist, das in einem beliebigen Dokument auftaucht, und das alle Dokumente angibt, in dem die jeweiligen Wörter vorkommen.

Folgende Tabelle zeigt den allgemeinen Aufbau eines invertierten Index. Wir können sehen, dass eine Suche nach „London“ ergibt, dass der Begriff in sechs unterschiedlichen Dokumenten im Index vorkommt. Ein solcher invertierter Index ermöglicht es uns, textbasierte Abfragen sehr schnell auszuführen.

Token

Dokumenten-IDs

London

1,3,8,12,23,88

Paris

1,12,88

Madrid3,8,12
Berlin12,23

Suche nach numerischen Daten und Geopositionsdaten für effiziente räumliche Analyse

Numerische Daten und Geopositionsdaten werden in BKD-Bäumen gespeichert, die auch als „Block-KD-Baum-Index“ bezeichnet werden. Es handelt sich um eine Datenstruktur, die in Anwendungen im Ingenieurswesen für effiziente räumliche Indexierung und Abfrage multidimensionaler Daten verwendet wird. Sie organisiert Datenpunkte in Blöcken und ermöglicht schnelle Bereichssuchen und Nearest-Neighbor-Abfragen in großen Datensätzen. Somit ist es ein wertvolles Tool für Ingenieure, die sich mit der Analyse und Optimierung räumlicher Daten auseinandersetzen.

Vektorsuche/Semantische Suche mit NLP

Vielleicht haben Sie schon von der Vektorsuche gehört, aber was genau verbirgt sich dahinter? Vektorsuchmaschinen – auch bekannt als Vektordatenbanken, semantische Suche oder Kosinus-Suche – finden die „nächsten Nachbarn“ (Nearest Neighbors) zu einer bestimmten, vektorisierten Suchanfrage. Die enorme Stärke der Vektorsuche liegt darin, dass sie ähnliche Dokumente findet, die keine exakte textuelle Übereinstimmung aufweisen, wie es bei unserem obigen Beispiel mit dem invertierten Index erforderlich wäre. Stattdessen nutzt sie Vektoren, die einen bestimmten Grad an inhaltlicher Ähnlichkeit beschreiben. 

Ähnliches Thema: Was ist Vektorsuche?

Einige gängige Anwendungsfälle für die Vektorsuche sind: 

  • Beantwortung von Fragen
  • Antworten auf zuvor beantwortete Fragen in Textform finden, bei denen die gestellte Frage ähnlich, aber nicht exakt dieselbe ist
  • Empfehlungen – beispielsweise eine Musikanwendung, die ähnliche Stücke basierend auf Ihren Vorlieben sucht

Alle diese Anwendungsfälle nutzen Vektoren mit zehntausenden Dimensionen, die eine umfassende Repräsentation der Daten für eine genaue Ähnlichkeitsbeurteilung und zielgerichtete Empfehlungen bieten.

Elasticsearch unterstützt die Vektorsuche über den Dokumenttyp dense_vector und seine Fähigkeit, Ähnlichkeitssuchen zwischen dem Vektor im Dokument und dem Suchbegriff durchzuführen, nachdem dieser in einen Vektor umgewandelt wurde.

Für all diejenigen, die tiefer in den Bereich der generativen KI eintauchen möchten, bieten wir zudem ESRE an – die Elasticsearch Relevance Engine™. Diese wurde speziell für den Betrieb von KI-basierten Suchanwendungen entwickelt. ESRE stellt Entwickler:innen eine umfassende Suite hochentwickelter Retrieval-Algorithmen zur Verfügung und bietet die Möglichkeit zur nahtlosen Integration von Large Language Models (LLMs).

Nächste Schritte

Sobald Sie bereit sind, unterstützen wir Sie gerne auf drei verschiedenen Wegen dabei, Daten gewinnbringend in Ihr Unternehmen einzubinden:

  1. Starten Sie eine kostenlose Testversion und sehen Sie, wie Elastic Cloud Ihr Unternehmen unterstützen kann.
  2. Sehen Sie sich auch das Webinar Erste Schritte mit Elasticsearch an.
  3. Lernen Sie unsere Produkte bei einer Tour kennen, entdecken Sie die Elasticsearch-Plattform und die Vorteile unserer Lösungen für Ihre Anforderungen.

 

Englische Originalversion ursprünglich am 24. Februar 2013 veröffentlicht; am 17. Juli 2023 aktualisiert.