3 Einführung in OpenSearch für Entwickler

Als Entwickler stehen wir heute vor der Herausforderung, immer größere Datenmengen nicht nur zu speichern, sondern auch effizient durchsuchbar zu machen. Stellen Sie sich vor, Sie entwickeln eine E-Commerce-Plattform mit Millionen von Produkten. Kunden erwarten sofortige, relevante Suchergebnisse, auch wenn sie Tippfehler machen oder Produktbeschreibungen nur teilweise kennen. Genau für solche Anforderungen wurde OpenSearch entwickelt.

3.1 Von relationalen Datenbanken zu OpenSearch

Um zu verstehen, warum OpenSearch so wertvoll ist, lassen Sie uns zunächst betrachten, warum traditionelle relationale Datenbanken bei bestimmten Aufgaben an ihre Grenzen stoßen. Nehmen wir ein konkretes Beispiel:

In einer relationalen Datenbank würden Sie Produktdaten vielleicht so strukturieren:

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    description TEXT,
    price DECIMAL(10,2),
    category_id INT
);

CREATE TABLE product_attributes (
    product_id INT,
    attribute_name VARCHAR(50),
    attribute_value VARCHAR(100)
);

CREATE TABLE product_categories (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    parent_id INT
);

Wenn ein Kunde nun nach “wasserdichte kamera unter 300 euro” sucht, müssten Sie komplexe SQL-Queries mit LIKE-Operatoren und Joins schreiben. Die Performance wäre suboptimal, und die Ergebnisse wären nicht nach Relevanz sortiert.

In OpenSearch können wir dieselben Daten natürlicher modellieren:

{
    "id": "P12345",
    "name": "Wasserdichte Digitalkamera XC-100",
    "description": "Kompakte, robuste Kamera für Outdoor-Aktivitäten",
    "price": 299.99,
    "category": {
        "name": "Kameras",
        "path": ["Elektronik", "Foto & Video", "Kameras"]
    },
    "attributes": {
        "wasserdicht": true,
        "maxTiefe": "10m",
        "auflösung": "20MP",
        "akkulaufzeit": "4h"
    },
    "tags": ["outdoor", "wasserdicht", "kompakt"]
}

Diese dokumentenorientierte Struktur bietet mehrere Vorteile:

3.2 Der invertierte Index

Das Konzept hinter der Suchgeschwindigkeit von OpenSearch ist der invertierte Index. Stellen Sie sich einen klassischen Buchindex vor, der für jedes wichtige Wort die Seitenzahlen auflistet. OpenSearch verwendet ein ähnliches, aber deutlich fortgeschritteneres Prinzip.

Nehmen wir drei Produktbeschreibungen:

  1. “Wasserdichte Digitalkamera für Outdoor-Aktivitäten”
  2. “Professionelle Digitalkamera mit WLAN”
  3. “Wasserdichtes Smartphone mit guter Kamera”

OpenSearch erstellt daraus intern eine Struktur wie diese:

wasserdicht   → Dokument 1, Dokument 3
digital       → Dokument 1, Dokument 2
kamera        → Dokument 1, Dokument 2, Dokument 3
outdoor       → Dokument 1
professionell → Dokument 2
wlan         → Dokument 2
smartphone   → Dokument 3

Wenn jemand nach “wasserdichte kamera” sucht, kann OpenSearch sofort die Dokumente 1 und 3 als potenzielle Treffer identifizieren, da nur sie beide Suchbegriffe enthalten. Zusätzlich kann OpenSearch die Ergebnisse nach Relevanz sortieren, etwa basierend darauf, wie oft die Suchbegriffe vorkommen oder wie nah sie beieinander stehen.

3.3 Die verteilte Architektur verstehen

OpenSearch wurde von Grund auf mit Fokus auf Skalierbarkeit entwickelt. Stellen Sie sich einen großen Bibliothekskatalog vor: Anstatt alle Bücher in einem einzigen Regal zu stapeln, verteilen wir sie auf mehrere Regale (Shards) und erstellen Kopien (Replicas) für mehr Sicherheit und schnelleren Zugriff.

In OpenSearch sieht das so aus:

  1. Sharding: Ein Index wird in mehrere Teilstücke (Shards) aufgeteilt

    PUT /products
    {
      "settings": {
        "index": {
          "number_of_shards": 3,
          "number_of_replicas": 1
        }
      }
    }
  2. Replikation: Jeder Shard wird mindestens einmal repliziert

  3. Automatische Verteilung: OpenSearch verteilt Shards und Replicas automatisch im Cluster

3.4 Die REST API als universelle Schnittstelle

Eine der größten Stärken von OpenSearch ist seine REST API. Das macht den Zugang zu den Daten flexibel und unabhängig vom verwendeten Tool. Sie ist die zentrale Schnittstelle für alle Operationen und folgt einem intuitiven Muster. Hier einige Beispiele:

Ein Dokument indexieren:

PUT /products/_doc/P12345
{
    "name": "Wasserdichte Digitalkamera XC-100",
    "price": 299.99
}

Nach Dokumenten suchen:

GET /products/_search
{
    "query": {
        "match": {
            "name": "wasserdichte kamera"
        }
    }
}

Den Cluster-Status prüfen:

GET /_cluster/health

Diese HTTP-basierte API bietet mehrere Vorteile:

3.5 Anwendungsfälle in der Praxis

OpenSearch eignet sich beispielsweise für:

  1. Enterprise Search Denken Sie an eine Unternehmenssuchmaschine, die:
  2. Log Analytics Ein modernes System produziert täglich Gigabytes an Logs:
  3. E-Commerce Eine Online-Plattform benötigt:

3.6 Erste Schritte mit OpenSearch

Lassen Sie uns ein erstes praktisches Beispiel durchgehen. Wir erstellen einen Index für Produktdaten und führen einige grundlegende Operationen durch:

  1. Index erstellen:

    PUT /products
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "name": { "type": "text" },
          "description": { "type": "text" },
          "price": { "type": "float" },
          "category": { "type": "keyword" }
        }
      }
    }
  2. Ein Produkt hinzufügen:

    PUT /products/_doc/1
    {
      "name": "Wasserdichte Digitalkamera XC-100",
      "description": "Perfekt für Outdoor-Aktivitäten",
      "price": 299.99,
      "category": "Kameras"
    }
  3. Nach Produkten suchen:

    GET /products/_search
    {
      "query": {
        "match": {
          "description": "outdoor"
        }
      }
    }

Diese Beispiele zeigen die grundlegenden Konzepte: