Elasticsearch APIs nutzen: Eine Anleitung

Ashley Innocent

Ashley Innocent

24 March 2026

Elasticsearch APIs nutzen: Eine Anleitung

Apidog für Unternehmen

On-Premises-Bereitstellung

SSO & RBAC

SOC 2 konform

Apidog Enterprise entdecken

TL;DR

Elasticsearch APIs ermöglichen Suche und Analysen im großen Maßstab. Sie indizieren Dokumente als JSON, führen Abfragen mit einer leistungsstarken DSL durch und aggregieren Ergebnisse für Analysen. Die Authentifizierung erfolgt über API-Schlüssel oder Basic Auth. Verwenden Sie für Tests Apidog, um Index-Mappings zu validieren, Suchanfragen zu testen und Aggregationen zu debuggen, bevor Sie sie in Produktionsclustern bereitstellen.

Einleitung

Elasticsearch ist eine verteilte Such- und Analyse-Engine. Es verarbeitet strukturierten Text, Logs, Metriken und mehr. Unternehmen nutzen es für die Volltextsuche in Anwendungen, die Log-Analyse zum Debuggen und Echtzeit-Analyse-Dashboards.

Elasticsearch ist das Herzstück des ELK-Stacks (Elasticsearch, Logstash, Kibana). Sie können es aber auch direkt über APIs ohne Logstash verwenden.

💡
Wenn Sie Suchfunktionen oder Log-Analysen entwickeln, hilft Ihnen Apidog beim Testen von Abfragen, Validieren von Mappings und Debuggen von Aggregationen. Sie können Suchvorlagen speichern und mit Ihrem Team teilen.
Button

Elasticsearch APIs mit Apidog testen - kostenlos

Am Ende dieses Leitfadens werden Sie in der Lage sein:

Erste Schritte

Elasticsearch lokal ausführen

# Docker
docker run -p 9200:9200 \
  -e "discovery.type=single-node" \
  elasticsearch:8.11.0

# Oder von elastic.co herunterladen

Installation überprüfen

curl -X GET "http://localhost:9200"

Antwort:

{
  "name": "elasticsearch-1",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "abc123",
  "version": {
    "number": "8.11.0",
    "build_flavor": "default"
  },
  "tagline": "You know, for search"
}

Authentifizierung

Elasticsearch 8.x erfordert standardmäßig eine Authentifizierung:

curl -X GET "http://localhost:9200/_cluster/health" \
  -u elastic:your_password

Oder verwenden Sie API-Schlüssel (erstellt in Kibana oder über API).

Indizes und Dokumente

Einen Index erstellen

curl -X PUT "http://localhost:9200/products" \
  -u elastic:your_password \
  -H "Content-Type: application/json" \
  -d '{
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0
    },
    "mappings": {
      "properties": {
        "name": { "type": "text" },
        "price": { "type": "float" },
        "category": { "type": "keyword" },
        "in_stock": { "type": "boolean" },
        "created_at": { "type": "date" }
      }
    }
  }'

Ein Dokument indizieren

curl -X POST "http://localhost:9200/products/_doc" \
  -u elastic:your_password \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Wireless Headphones",
    "price": 79.99,
    "category": "electronics",
    "in_stock": true,
    "created_at": "2026-03-24T10:00:00Z"
  }'

Antwort:

{
  "_index": "products",
  "_id": "abc123",
  "_version": 1,
  "result": "created",
  "_seq_no": 0,
  "_primary_term": 1
}

Ein Dokument abrufen

curl -X GET "http://localhost:9200/products/_doc/abc123" \
  -u elastic:your_password

Ein Dokument aktualisieren

curl -X PUT "http://localhost:9200/products/_doc/abc123" \
  -u elastic:your_password \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Wireless Headphones Pro",
    "price": 99.99,
    "category": "electronics",
    "in_stock": true,
    "created_at": "2026-03-24T10:00:00Z"
  }'

Ein Dokument löschen

curl -X DELETE "http://localhost:9200/products/_doc/abc123" \
  -u elastic:your_password

Massenoperationen

Mehrere Dokumente effizient indizieren:

curl -X POST "http://localhost:9200/products/_bulk" \
  -u elastic:your_password \
  -H "Content-Type: application/x-ndjson" \
  -d '{"index":{"_id":"1"}}
{"name":"Product A","price":10.99,"category":"books","in_stock":true}
{"index":{"_id":"2"}}
{"name":"Product B","price":20.99,"category":"electronics","in_stock":false}
'

Suchanfragen

Grundlegende Suche

curl -X GET "http://localhost:9200/products/_search" \
  -u elastic:your_password \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "match": {
        "name": "headphones"
      }
    }
  }'

Bool-Abfragen

Mehrere Bedingungen kombinieren:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "headphones" } }
      ],
      "filter": [
        { "term": { "category": "electronics" } },
        { "range": { "price": { "lte": 100 } } },
        { "term": { "in_stock": true } }
      ]
    }
  }
}

Volltextsuche mit Scoring

{
  "query": {
    "multi_match": {
      "query": "wireless audio headphones",
      "fields": ["name^2", "description"],
      "type": "best_fields",
      "fuzziness": "AUTO"
    }
  }
}

Feldnamen mit ^2 erhalten eine doppelte Gewichtung im Scoring.

Phrasensuche

Genaue Phrasen finden:

{
  "query": {
    "match_phrase": {
      "description": "noise canceling"
    }
  }
}

Wildcard und Regex

{
  "query": {
    "wildcard": {
      "name": "*headphone*"
    }
  }
}

Sortierung

{
  "query": { "match_all": {} },
  "sort": [
    { "price": "asc" },
    { "_score": "desc" }
  ]
}

Paginierung

{
  "from": 20,
  "size": 10,
  "query": { "match_all": {} }
}

Aggregationen

Aggregationen berechnen zusammenfassende Statistiken über Ihre Daten.

Durchschnittspreis nach Kategorie

curl -X GET "http://localhost:9200/products/_search" \
  -u elastic:your_password \
  -H "Content-Type: application/json" \
  -d '{
    "size": 0,
    "aggs": {
      "by_category": {
        "terms": { "field": "category" },
        "aggs": {
          "avg_price": { "avg": { "field": "price" } },
          "min_price": { "min": { "field": "price" } },
          "max_price": { "max": { "field": "price" } }
        }
      }
    }
  }'

Histogramm der Preise

{
  "size": 0,
  "aggs": {
    "price_histogram": {
      "histogram": {
        "field": "price",
        "interval": 25
      }
    }
  }
}

Datumshistogramme

{
  "size": 0,
  "aggs": {
    "sales_over_time": {
      "date_histogram": {
        "field": "created_at",
        "calendar_interval": "month"
      }
    }
  }
}

Kardinalität (eindeutige Zählungen)

{
  "size": 0,
  "aggs": {
    "unique_categories": {
      "cardinality": { "field": "category" }
    }
  }
}

Mappings und Analyzer

Feldtypen

Typ Verwendung für
text Volltextsuche, analysiert
keyword Genaue Werte, Filterung, Sortierung
integer, float Zahlen
boolean Wahr/Falsch
date Datums- und Uhrzeiten
object Verschachtelte JSON-Objekte
nested Arrays von Objekten (pflegt Beziehungen)
geo_point Breiten-/Längengrade

Benutzerdefinierte Analyzer

Für spezialisierte Textverarbeitung:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "autocomplete_filter"]
        }
      },
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 20
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "autocomplete",
        "search_analyzer": "standard"
      }
    }
  }
}

Cluster-Verwaltung

Cluster-Zustand

curl -X GET "http://localhost:9200/_cluster/health"

Antwort:

{
  "cluster_name": "elasticsearch",
  "status": "green",
  "number_of_nodes": 3,
  "active_primary_shards": 25
}

Status:

Index-Statistiken

curl -X GET "http://localhost:9200/_cat/indices?v"

Knoten-Statistiken

curl -X GET "http://localhost:9200/_nodes/stats"

Cache leeren

curl -X POST "http://localhost:9200/_cache/clear"

Testen mit Apidog

Elasticsearch-Abfragen können komplex sein. Gründlich testen.

1. Häufige Abfragen speichern

Suchvorlagen in Apidog speichern:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "{{search_field}}": "{{search_term}}" } }
      ],
      "filter": [
        { "range": { "{{price_field}}": { "lte": "{{max_price}}" } } }
      ]
    }
  }
}

2. Antworten validieren

pm.test('Suche liefert Ergebnisse', () => {
  const response = pm.response.json()
  pm.expect(response.hits.total.value).to.be.above(0)
})

pm.test('Aggregationen vorhanden', () => {
  const response = pm.response.json()
  pm.expect(response.aggregations).to.exist
})

3. Umgebungsseparation

# Lokal
ES_HOST: http://localhost:9200
ES_USER: elastic
ES_PASSWORD: your_password

# Produktion
ES_HOST: https://search.yourcompany.com
ES_API_KEY: prod_api_key

Elasticsearch APIs mit Apidog testen - kostenlos

Häufige Fehler und Lösungen

403 Verboten

Ursache: Authentifizierung fehlgeschlagen oder unzureichende Berechtigungen.

Lösung: Anmeldeinformationen überprüfen. Sicherstellen, dass der API-Schlüssel die korrekten Indexberechtigungen hat.

404 index_not_found_exception

Ursache: Index existiert nicht.

Lösung: Zuerst den Index erstellen oder automatische Erstellung verwenden (standardmäßig aktiviert, aber nicht für die Produktion empfohlen).

circuit_breaking_exception

Ursache: Abfrage verwendet zu viel Speicher.

Lösung: Den size-Parameter reduzieren, Abfragen vereinfachen, Filter hinzufügen, um die Ergebnisliste zu reduzieren.

search_phase_execution_exception

Ursache: Syntaxfehler in der Abfrage.

Lösung: Überprüfen Sie Ihr JSON. Häufige Probleme: fehlende Anführungszeichen, falsche Feldpfade.

Alternativen und Vergleiche

Funktion Elasticsearch OpenSearch Meilisearch Typesense
Einrichtung Selbst gehostet Selbst gehostet Einzelne Binärdatei Einzelne Binärdatei
Suchqualität Hervorragend Gut Hervorragend Gut
Lernkurve Steil Steil Einfach Einfach
Skalierbarkeit Hervorragend Hervorragend Gut Gut
Cloud-Angebot Elastic Cloud OpenSearch Serverless Meilisearch Cloud Typesense Cloud

Elasticsearch bietet die meisten Funktionen und die größte Community. Meilisearch und Typesense sind einfacher für die grundlegende Suche.

Anwendungsfälle aus der Praxis

E-Commerce-Suche. Eine Einzelhandelsseite indiziert 100.000 Produkte. Benutzer suchen nach Name, Beschreibung, Kategorie und Preisspanne. Die Autovervollständigung schlägt Produkte während der Eingabe vor. Filter grenzen die Ergebnisse nach Kategorie und Verfügbarkeit ein.

Anwendungslogs. Ein DevOps-Team sendet Logs über Filebeat an Elasticsearch. Ingenieure suchen Logs nach Dienst, Schweregrad und Zeitbereich. Dashboards zeigen Fehlerraten und Antwortzeiten an.

Sicherheitsanalysen. Ein Sicherheitsteam indiziert Netzwerk-Logs. Sie suchen nach verdächtigen IP-Adressen, visualisieren Verkehrsmuster und alarmieren bei Anomalien, die durch Aggregationen erkannt werden.

Zusammenfassung

Das haben Sie gelernt:

Ihre nächsten Schritte:

  1. Elasticsearch lokal ausführen
  2. Einen Index mit Mappings erstellen
  3. Einige Testdokumente indizieren
  4. Suchanfragen schreiben
  5. Aggregationen ausprobieren

Elasticsearch APIs mit Apidog testen - kostenlos

Button

FAQ

Was ist der Unterschied zwischen Elasticsearch und Solr?Beide sind Lucene-basierte Suchmaschinen. Elasticsearch hat ein besseres verteiltes Design und bessere APIs. Solr bietet mehr Unternehmensfunktionen. Die meisten neuen Projekte entscheiden sich für Elasticsearch.

Wie gehe ich mit Sonderzeichen in der Suche um?Sonderzeichen escapen: ()[]{}:^\"\\+-!~*?| mit Backslash. Oder verwenden Sie eine simple_query_string, die toleranter ist.

Was ist ein Shard?Shards sind Teile eines Indexes. Jeder Shard ist ein Lucene-Index. Primäre Shards sind zum Schreiben da, Replikats-Shards sind Kopien zur Lese-Skalierung und Fehlertoleranz.

Wie viele Shards sollte ich erstellen?Faustregel: 20-50 GB pro Shard. Beginnen Sie mit 1 primären Shard, fügen Sie Replikate hinzu. Erhöhen Sie primäre Shards nur bei Bedarf (können nicht reduziert werden).

Kann ich Mappings nach der Indizierung ändern?Teilweise. Neue Felder können frei hinzugefügt werden. Um bestehende Feldtypen zu ändern, müssen die Daten neu indiziert werden. Verwenden Sie Indextemplates, um Mappings konsistent zu verwalten.

Was ist der `_routing`-Parameter?Leitet Dokumente basierend auf einem Feldwert an bestimmte Shards weiter. Standard ist _id. Verwenden Sie Routing, wenn Abfragen immer nach einem bestimmten Feld (wie user_id) filtern, um eine bessere Leistung zu erzielen.

Wie gehe ich mit zeitbasierten Daten um?Verwenden Sie datumsbasierte Indizes: logs-2026.03.24. Dies ermöglicht es Ihnen, alte Daten durch Löschen von Indizes zu entfernen und verbessert die Abfrageleistung, indem weniger Indizes durchsucht werden.

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen