<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Enrico Zimuel - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Enrico Zimuel - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/author/enrico-zimuel</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/author/enrico-zimuel</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/author/enrico-zimuel.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Fri, 18 Sep 2026 19:40:09 GMT</lastBuildDate>
  <item>
    <title><![CDATA[So erstellen Sie agentische KI-Anwendungen mit Mastra und Elasticsearch]]></title>
    <description><![CDATA[Lernen Sie anhand eines praktischen Beispiels, wie Sie agentische KI-Anwendungen mit Mastra und Elasticsearch erstellen.]]></description>
    <content:encoded><![CDATA[<p>In diesem Artikel zeigen wir Ihnen, wie Sie mit dem TypeScript-Framework von <a href="https://mastra.ai/">Mastra</a> agentische Anwendungen erstellen, die mit <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a> interagieren.</p><p>Wir haben kürzlich zum Open-Source-Projekt <a href="https://github.com/mastra-ai/mastra">mastra-ai/mastra</a> beigetragen, indem wir Unterstützung für Elasticsearch als Vektordatenbank hinzugefügt haben. Mit diesem neuen Feature können Sie Elasticsearch nativ in Mastra verwenden, um Einbettungen zu speichern. Zusätzlich zu Vektoren bietet Elasticsearch eine Reihe erweiterter Features, die alle Ihre Anforderungen an das Kontext-Engineering erfüllen. (zum Beispiel <a href="https://www.elastic.co/search-labs/blog/context-engineering-hybrid-search-evolution-agentic-ai">hybride Suche und Reranking</a>).</p><p>Dieser Artikel beschreibt die Erstellung eines Agenten zur Implementierung einer RAG-Architektur (Retrieval-Augmented Generation) mit Elasticsearch. Wir stellen ein Demoprojekt vor, bei dem ein agentischer Ansatz verwendet wird, um mit einem in Elasticsearch gespeicherten Korpus von Science-Fiction-Filmdaten zu interagieren. Das Projekt ist unter <a href="https://github.com/elastic/mastra-elasticsearch-example">elastic/mastra-elasticsearch-example</a> verfügbar.</p><h2>Mastra</h2><p>Mastra ist ein TypeScript-Framework zur Erstellung agentischer KI-Anwendungen.</p><p>Eine Projektstruktur in Mastra sieht wie folgt aus:</p>src/
├── mastra/
│   ├── agents/
│   │   └── weather-agent.ts
│   ├── tools/
│   │   └── weather-tool.ts
│   ├── workflows/
│   │   └── weather-workflow.ts
│   ├── scorers/
│   │   └── weather-scorer.ts
│   └── index.ts
├── .env.example
├── package.json
└── tsconfig.json<p>In Mastra können Sie <a href="https://mastra.ai/docs/agents/overview">Agenten</a>, <a href="https://mastra.ai/docs/agents/using-tools">Tools</a>, <a href="https://mastra.ai/docs/workflows/overview">Workflows</a> und <a href="https://mastra.ai/docs/evals/overview">Scores</a> erstellen.</p><p>Ein <strong>Agent</strong> ist eine Klasse, die eine Nachricht als Eingabe akzeptiert und eine Antwort als Ausgabe erzeugt. Ein Agent kann Tools, Large Language Models (LLMs) und einem Speicher verwenden (Abbildung 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0f7484f7501997dc/6a170417cdacbffb5a7d28f6/f6aca2dcc7fcc45d25e06681649be1b2b7eb6781-706x721.png" alt="Ein Diagramm zeigt, wie ein Agent in Mastra funktioniert." /><p>Die <strong>Tools</strong> eines Agenten ermöglichen ihm die Interaktion mit der „Außenwelt“, beispielsweise die Kommunikation mit einer Web-API oder die Durchführung einer internen Operation, wie etwa das Abfragen von Elasticsearch. Die <strong>Speicherkomponente</strong> ist entscheidend für die Speicherung des Konversationsverlaufs, einschließlich früherer Ein- und Ausgaben. Dank dieser gespeicherten Kontextinformationen kann der Agent anhand früherer Interaktionen fundiertere und relevantere Antworten auf künftige Fragen geben.</p><p><strong>Workflows</strong> ermöglichen Ihnen die Definition komplexer Aufgabenabläufe anhand klarer, strukturierter Schritte, anstatt sich auf die Argumentation eines einzelnen Agenten zu verlassen (Abbildung 2). Sie geben Ihnen die volle Kontrolle über die Aufteilung von Aufgaben, den Datenaustausch zwischen ihnen und den Zeitpunkt der Ausführung. Workflows werden standardmäßig über die integrierte Ausführungs-Engine ausgeführt oder können auf <a href="https://mastra.ai/docs/deployment/workflow-runners">Workflow-Runner</a> bereitgestellt werden.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd82ea661569e1018/6a170419dc55de3adde00cc9/0dce161cf7891207015dc87532b5b90df1822432-880x252.png" alt="Ein Beispiel für einen Workflow in Mastra." /><p>In Mastra können Sie außerdem Scores definieren. Dabei handelt es sich um automatisierte Tests, die die Ausgaben der Agenten mithilfe modellbasierter, regelbasierter und statistischer Methoden bewerten. Scorer geben <em>Scores</em> zurück: numerische Werte (in der Regel zwischen 0 und 1), die messen, wie gut eine Ausgabe Ihre Bewertungskriterien erfüllt. Diese Scores ermöglichen Ihnen eine objektive Leistungsüberwachung, den Vergleich verschiedener Ansätze und die Ermittlung von Verbesserungsmöglichkeiten in Ihren KI-Systemen. Scorer können mit Ihren eigenen Prompts und Scoring-Funktionen angepasst werden.</p><h2>Elasticsearch</h2><p>Für die Ausführung des Demoprojekts benötigen wir eine laufende Elasticsearch-Instanz. Sie können eine kostenlose Testversion von <a href="https://www.elastic.co/cloud">Elastic Cloud</a> aktivieren oder Elasticsearch lokal mithilfe des Skripts <a href="https://github.com/elastic/start-local"><code>start-local</code></a> installieren:</p>curl -fsSL https://elastic.co/start-local | sh<p>Dadurch werden Elasticsearch und Kibana auf Ihrem Computer installiert und ein API-Schlüssel generiert, der zur Konfiguration der Mastra-Integration verwendet wird.</p><p>Der API-Schlüssel wird als Ausgabe des vorherigen Befehls angezeigt und in einer <strong>.env</strong>-Datei im Ordner elastic-start-local gespeichert.</p><h2>Demo installieren und konfigurieren</h2><p>Wir haben ein <a href="https://github.com/elastic/mastra-elasticsearch-example">Elastic/mastra-elasticsearch-example-Repository</a> erstellt, das den Quellcode des Demoprojekts enthält. Das im Repository bereitgestellte Beispiel veranschaulicht, wie Sie in Mastra einen Agenten erstellen, der eine RAG-Architektur zum Abrufen von Dokumenten aus Elasticsearch implementiert.</p><p>Wir haben für die Demo einen Datensatz zu Science-Fiction-Filmen bereitgestellt. Wir haben 500 Filme aus dem IMDb-Datensatz auf <a href="https://www.kaggle.com/datasets/rajugc/imdb-movies-dataset-based-on-genre/versions/2?select=scifi.csv">Kaggle</a> extrahiert.</p><p>Der erste Schritt besteht in der Installation der Abhängigkeiten des Projekts mit npm. Verwenden Sie dazu den folgenden Befehl:</p>npm install<p>Anschließend müssen wir die <strong>.env</strong>-Datei konfigurieren, die die Einstellungen enthalten wird. Wir können diese Datei generieren, indem wir die Struktur aus der <strong>.env.example-Datei</strong> mit folgendem Befehl kopieren:</p>cp .env.example .env<p>Nun können wir die .env-Datei bearbeiten, indem wir die fehlenden Informationen hinzufügen:</p>OPENAI_API_KEY=
ELASTICSEARCH_URL=
ELASTICSEARCH_API_KEY=
ELASTICSEARCH_INDEX_NAME=scifi-movies<p>Der Name des Elasticsearch-Index lautet <strong><code>scifi-movies</code></strong>. Auf Wunsch können Sie ihn mithilfe der .env-Variablen <code>ELASTICSEARCH_INDEX_NAME</code> ändern.</p><p>Wir haben OpenAI als Einbettungsdienst verwendet, was bedeutet, dass Sie einen API-Schlüssel für OpenAI in der .env-Variablen <code>OPENAI_API_KEY</code> angeben müssen.</p><p>Das im Beispiel verwendete Einbettungsmodell ist <a href="https://developers.openai.com/api/docs/models/text-embedding-3-small">openai/text-embedding-3-small</a>, mit einer Einbettungsdimension von 1536.</p><p>Zur Generierung der endgültigen Antwort haben wir das Modell <a href="https://developers.openai.com/api/docs/models/gpt-5-nano">openai/gpt-5-nano</a> verwendet, um die Kosten zu senken.</p><p>Die RAG-Architektur ermöglicht die Verwendung eines weniger leistungsfähigen (und in der Regel kostengünstigeren) finalen LLM-Modells, da die Hauptarbeit der Beantwortung durch die Retrieval-Komponente (in diesem Fall Elasticsearch) erledigt wird.</p><p>Das kleinere LLM ist nur für zwei Hauptaufgaben zuständig:</p><ul><li><p><strong>Umformulierung/Einbettung der Abfrage:</strong> Umwandlung der in natürlicher Sprache formulierten Frage des Nutzers in eine Vektoreinbettung für die semantische Suche.</p></li><li><p><strong>Antwortsynthese:</strong> Die relevanten, abgerufenen Kontextfragmente (Dokumente/Filme) werden gemäß den vorgegebenen Anweisungen zu einer kohärenten, endgültigen und für Menschen lesbaren Antwort zusammengeführt.</p></li></ul><p>Da der RAG-Prozess <strong>den genauen sachlichen Kontext</strong> liefert, der für die Antwort benötigt wird, muss das endgültige LLM weder umfangreich noch hochkomplex sein und es muss nicht das gesamte erforderliche Wissen innerhalb seiner eigenen Parameter besitzen (was die Stärke großer, teurer Modelle ist). Es fungiert im Wesentlichen als ausgeklügelter Textzusammenfasser und -formatierer für den von Elasticsearch bereitgestellten Kontext und nicht als vollwertige Wissensdatenbank an sich. Auf diese Weise lassen sich Modelle wie <code>gpt-5-nano</code> zur Kosten- und Latenzoptimierung verwenden.</p><p>Nach der Konfiguration der .env-Datei können Sie die Filme mithilfe des folgenden Befehls in Elasticsearch ingestieren:</p>npx tsx src/utility/store.ts<p>Der Ausgabe sollte wie folgt aussehen:</p>🚀 Starting ingestion of 500 movies from 500_scifi_movies.jsonl...
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 1/500 (0%) | ok:1 | fail:0 | chunks:1 | eta:19m 33s | current:Capricorn One
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 2/500 (0%) | ok:2 | fail:0 | chunks:2 | eta:10m 32s | current:Doghouse
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 3/500 (1%) | ok:3 | fail:0 | chunks:3 | eta:7m 33s | current:Dinocroc
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 4/500 (1%) | ok:4 | fail:0 | chunks:7 | eta:6m 10s | current:Back to the Future           
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 5/500 (1%) | ok:5 | fail:0 | chunks:9 | eta:5m 14s | current:The Projected Man            
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 6/500 (1%) | ok:6 | fail:0 | chunks:11 | eta:4m 41s | current:I, Robot
...
✅ Ingestion complete in 1m 46s. Success: 500, Failed: 0, Chunks: 693.<p>Das Mapping des Science-Fiction-Filmindex enthält die folgenden Felder:</p><ul><li><p><strong>Einbettung</strong>, dense_vector mit 1536 Dimensionen, Kosinus-Ähnlichkeit.</p></li><li><p><strong>Beschreibung</strong>, Text mit der Beschreibung des Films.</p></li><li><p><strong>Regisseur</strong>, Text mit dem Namen des Regisseurs.</p></li><li><p><strong>Titel</strong> Text mit dem Titel des Films.</p></li></ul><p>Wir haben die Einbettungen anhand des Titels und der Beschreibung generiert. Da Titel und Beschreibung zwei separate Felder sind, stellt die Verknüpfung beider sicher, dass der resultierende Einbettungsvektor sowohl die spezifische, einzigartige Identität (Titel) als auch den reichhaltigen, beschreibenden Kontext (Beschreibung) des Films erfasst, was zu genaueren und umfassenderen semantischen Suchergebnissen führt. Durch diese kombinierte Eingabe erhält das Einbettungsmodell eine bessere einheitliche Darstellung des Dokumentinhalts für den Ähnlichkeitsabgleich.</p><h2>Demo ausführen</h2><p>Sie können die Demo mit folgendem Befehl ausführen:</p>npm run dev<p>Dieser Befehl startet eine Webanwendung unter <strong>localhost:4111</strong>, um auf Mastra Studio zuzugreifen (Abbildung 3).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8a539df677a33b36/6a17041a47d49c36842d88a0/1567e309df21a12bcf1dfef4429f82342549956c-1705x1079.png" alt="Ein Screenshot von Mastra Studio mit dem Beispiel des Elasticsearch-Agenten." /><p><a href="https://mastra.ai/docs/getting-started/studio">Mastra Studio</a> bietet eine interaktive Benutzeroberfläche zum Erstellen und Testen Ihrer Agenten sowie eine REST-API, die Ihre Mastra-Anwendung als lokalen Dienst bereitstellt. So können Sie sofort mit der Entwicklung beginnen, ohne sich Gedanken über die Integration machen zu müssen.</p><p>Wir haben einen <strong>Elasticsearch-Agenten</strong> bereitgestellt, der das <a href="https://mastra.ai/reference/tools/vector-query-tool">createVectorQueryTool</a> von Mastra als Tool zur Ausführung semantischer Suchen mit Elasticsearch verwendet. Dieser Agent verwendet den RAG-Ansatz, um relevante Dokumente (d. h. Filme) zu suchen, die die Frage des Nutzers beantworten.</p><p>Dieser Agent verwendet folgenden Prompt:</p>You are a helpful assistant that answers questions based on the provided context.
Follow these steps for each response:

1. First, carefully analyze the retrieved context chunks and identify key information.
2. Break down your thinking process about how the retrieved information relates to the query.
3. Draw conclusions based only on the evidence in the retrieved context.
4. If the retrieved chunks don't contain enough information, explicitly state what's missing.

Format your response as:
THOUGHT PROCESS:
- Step 1: [Initial analysis of retrieved chunks]
- Step 2: [Reasoning based on chunks]

FINAL ANSWER:
[Your concise answer based on the retrieved context]

Important: When asked to answer a question, please base your answer only on the context provided in the tool. 
If the context doesn't contain enough information to fully answer the question, please state that explicitly and stop it.
Do not add more information than what is present in the retrieved chunks.
Remember: Explain how you're using the retrieved information to reach your conclusions.<p>Wenn Sie auf das Menü <code>Mastra Studio &gt; Agents</code> klicken und <strong>Elasticsearch-Agent</strong> auswählen, können Sie den Agenten über ein Chatsystem testen. Zum Beispiel können Sie Informationen zu Science-Fiction-Filmen mit folgender Frage stellen:</p><p><em>Finden Sie 5 Filme oder Fernsehserien über UFOs</em>.</p><p>Sie werden bemerken, dass der Agent das vectorQueryTool ausführen wird. Sie können auf das aufgerufene Tool klicken, um sich die Eingabe und die Ausgabe anzusehen. Am Ende der Ausführung beantwortet das LLM Ihre Frage unter Berücksichtigung des Kontexts aus dem „scifi-movies“-Index von Elasticsearch (Abbildung 4).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltda92a9b6e56528d3/6a17041c2b835f9724f4b0d6/d9998d4f687984de98845dae52d1288166abf448-1344x1071.png" alt=" Antwort von LLM unter Verwendung des Elasticsearch-Agenten." /><p>Mastra führt intern folgende Schritte aus:</p><ol><li><p><strong>Vektorumwandlung:</strong> Die Frage des Nutzers, <em>Finde 5 Filme oder TV-Serien über UFOs,</em> wird mithilfe des Modells <code>openai/text-embedding-3-small</code> von OpenAI in eine Vektoreinbettung umgewandelt.</p></li><li><p><strong>Vektorsuche:</strong> Diese Einbettung wird dann verwendet, um Elasticsearch über eine Vektorsuche abzufragen.</p></li><li><p><strong>Ergebnisabruf:</strong> Elasticsearch gibt eine Liste von 10 Filmen zurück, die für die Suchanfrage besonders relevant sind (d. h. die Filme, deren Vektoren dem Suchvektor des Nutzers am nächsten liegen).</p></li><li><p><strong>Antwortgenerierung:</strong> Die abgerufenen Filme und die ursprüngliche Nutzerfrage werden an das LLM gesendet, speziell <code>openai/gpt-5-nano</code>. Das LLM verarbeitet diese Informationen und generiert eine endgültige Antwort, um sicherzustellen, dass die Anfrage des Nutzers nach fünf Ergebnissen erfüllt wird.</p></li></ol><h2>Der Elasticsearch-Agent</h2><p>Hier haben wir den Quellcode des Elasticsearch-Agenten veröffentlicht.</p>import { Agent } from "@mastra/core/agent";
import { ElasticSearchVector } from '@mastra/elasticsearch';
import { createVectorQueryTool } from '@mastra/rag';
import { ModelRouterEmbeddingModel } from "@mastra/core/llm";
import { Memory } from "@mastra/memory";

const es_url = process.env.ELASTICSEARCH_URL;
const es_apikey = process.env.ELASTICSEARCH_API_KEY;
const es_index_name = process.env.ELASTICSEARCH_INDEX_NAME;
const prompt = 'insert here the previous prompt';

const esVector = new ElasticSearchVector({
  id: 'elasticsearch-vector',
  url: es_url,
  auth: {
    apiKey : es_apikey
  }
});

const vectorQueryTool = createVectorQueryTool({
  vectorStore: esVector,
  indexName: es_index_name,
  model: new ModelRouterEmbeddingModel("openai/text-embedding-3-small")
});

export const elasticsearchAgent = new Agent({
  id: "elasticsearch-agent",
  name: "Elasticsearch Agent",
  instructions: prompt,
  model: 'openai/gpt-5-nano',
  tools: { vectorQueryTool },
  memory: new Memory(),
});<p>Das <strong>vectorQueryTool</strong> ist das Tool, das zur Implementierung des Abrufteils des RAG-Beispiels aufgerufen wird. Es verwendet die <a href="https://mastra.ai/reference/vectors/elasticsearch">ElasticSearchVector</a>-Implementierung, die Elastic zu Mastra beigetragen hat.</p><p>Der Agent ist ein Objekt der Agentenklasse, das das vectorQueryTool, den Prompt und einen Speicher verbraucht. Wie Sie sehen können, ist der Code, den wir für die Verbindung von Elasticsearch mit einem Agenten implementieren müssen, sehr minimal.</p><h2>Fazit</h2><p>Dieser Artikel verdeutlichte die Einfachheit und Leistungsfähigkeit der Integration von Elasticsearch in das Mastra-Framework zur Entwicklung komplexer agentischer KI-Anwendungen. Konkret haben wir gezeigt, wie ein RAG-Agent erstellt wird, der eine semantische Suche in einem Korpus von Science-Fiction-Filmdaten durchführen kann, die in Elasticsearch indiziert sind.</p><p>Ein wichtiger Aspekt ist der direkte Beitrag von Elastic zum Open-Source-Projekt Mastra, der native Unterstützung für Elasticsearch als Vektorspeicher bietet. Diese Integration senkt die Einstiegshürde erheblich, wie der Quellcode des <strong>Elasticsearch-Agenten</strong> zeigt. Mit der Verwendung von <code>ElasticSearchVector</code> und <code>createVectorQueryTool</code> benötigt die vollständige Einrichtung für die Verbindung von Elasticsearch mit Ihrem Agenten nur wenige Zeilen Konfigurationscode.</p><p>Elasticsearch bietet verschiedene erweiterte Features zur Verbesserung der Ergebnisrelevanz. Zum Beispiel steigert die <a href="https://www.elastic.co/elasticsearch/hybrid-search">hybride Suche</a> die Genauigkeit erheblich, indem die lexikalische Suche mit Vektorsuche kombiniert wird. Ein weiteres interessantes Feature ist das Reranking mit den neuesten <a href="https://www.elastic.co/search-labs/tutorials/jina-tutorial/jina-reranker-v3">Jina-Modellen</a>, die am Ende der hybriden Suche angewendet werden können. Weitere Informationen zu diesen Technologien finden Sie in den folgenden Artikeln von Elasticsearch Labs:</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/hybrid-search-elasticsearch">Elasticsearch Hybrides Suchen</a> von Valentin Crettaz</p></li><li><p><a href="https://www.elastic.co/search-labs/blog/jina-models-elasticsearch-guide">Einführung in Jina-Modelle, ihre Funktionen und ihre Verwendung in Elasticsearch</a> von Scott Martens</p></li></ul><p>Wir empfehlen Ihnen außerdem, sich das bereitgestellte Beispiel anzusehen und damit zu beginnen, Ihre eigenen datengestützten Agenten mit Mastra und Elasticsearch zu entwickeln. Weitere Informationen zu Mastra finden Sie <a href="https://mastra.ai/docs">hier</a> in der offiziellen Dokumentation.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/build-agentic-ai-applications-mastra-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/build-agentic-ai-applications-mastra-elasticsearch</guid>
    <category><![CDATA[Agentische KI]]></category>
    <dc:creator><![CDATA[Enrico Zimuel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt083181bab7c0e2d0/6a17041eacf0880b70be99f5/ab30baf2f908534840c5d71a46705773807baf54-1280x720.png" length="0" type="image/png"/>
    <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Die Gemini CLI-Erweiterung für Elasticsearch mit Tools und Fähigkeiten]]></title>
    <description><![CDATA[Wir stellen die Erweiterung von Elastic für Googles Gemini CLI vor, mit der Elasticsearch-Daten in Entwickler- und agentischen Workflows gesucht, abgerufen und analysiert werden können.
]]></description>
    <content:encoded><![CDATA[<p>Wir freuen uns, die Veröffentlichung unserer Elastic-Erweiterung für Googles Gemini CLI ankündigen zu können, mit der Sie die volle Leistungsfähigkeit von <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a> und <a href="https://www.elastic.co/elasticsearch/agent-builder">Elastic Agent Builder</a> direkt in Ihren KI-Entwicklungsworkflow einbringen können. Diese Erweiterung bietet auch mehrere kürzlich entwickelte Agentenfähigkeiten für die Interaktion mit Elasticsearch.</p><p>Die Erweiterung ist <a href="https://github.com/elastic/gemini-cli-elasticsearch">hier</a> als Open-Source-Projekt verfügbar.</p><h2>Was ist Gemini CLI, und wie installieren Sie sie?</h2><p><a href="https://geminicli.com/">Gemini CLI</a> ist ein Open-Source-KI-Agent, der Googles Gemini-Modelle direkt in die Befehlszeile bringt. Er ermöglicht Entwicklern, über das Terminal mit KI zu interagieren, um Aufgaben wie das Generieren von Code, das Bearbeiten von Dateien, das Ausführen von Shell-Befehlen und das Abrufen von Informationen aus dem Web durchzuführen.</p><p>Im Gegensatz zu typischen Chat-Schnittstellen integriert sich die Gemini CLI in Ihre lokale Entwicklungsumgebung. Das bedeutet, dass sie den Projektkontext versteht, Dateien ändert, Builds oder Tests ausführt und Workflows direkt im Terminal automatisiert. Dies macht sie besonders nützlich für Entwickler, Site Reliability Engineers (SREs) und Engineers, die KI-gestütztes Codieren und Automatisierung wünschen, ohne ihren Befehlszeilen-Workflow zu verlassen.</p><p>Gemini CLI kann mit mehreren Paketmanagern installiert werden. Die gängigste Methode ist die Installation über npm:</p>npm install -g @google/gemini-cli<p>Wenn Sie sich über alternative Installationsmöglichkeiten informieren möchten, lesen Sie die <a href="https://geminicli.com/docs/get-started/installation/">offizielle Installationsseite</a>.</p><p>Starten Sie die CLI nach der Installation durch Ausführen des folgenden Befehls:</p>gemini<p>Sie sehen einen Bildschirm, wie in Abbildung 1 dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4ff43abe550941b4/6a17072ba29299fc2ad00fa4/6dfcec4a77b3dc83bf0d974417bf2e211abb1f4f-876x468.png" alt="Ein Screenshot der Gemini CLI." /><h2>Elasticsearch konfigurieren</h2><p>Wir benötigen eine laufende Elasticsearch-Instanz. Wenn Sie den Model Context Protocol (MCP)-Server verwenden möchten, benötigen Sie zudem Kibana 9.3+. Für die Nutzung der unten beschriebenen Elasticsearch Query Language (ES|QL)-Fähigkeit (<code>esql</code>) ist Kibana nicht erforderlich.</p><p>Sie können eine kostenlose Testversion auf <a href="https://www.elastic.co/cloud">Elastic Cloud</a> aktivieren oder es lokal mit dem <a href="https://github.com/elastic/start-local"><code>start-local</code></a>-Skript installieren:</p>curl -fsSL https://elastic.co/start-local | sh<p>Dadurch werden Elasticsearch und Kibana auf Ihrem Computer installiert und ein API-Schlüssel generiert, den Sie für die Konfiguration von Gemini CLI verwenden können.</p><p>Der API-Schlüssel wird als Ausgabe des vorherigen Befehls angezeigt und in einer <strong>.env</strong>-Datei im Ordner <strong><code>elastic-start-local</code></strong> gespeichert.</p><p>Wenn Sie Elasticsearch lokal (zum Beispiel <code>start-local</code>), und Elastic Agent Builder mit MCP verwenden möchten, müssen Sie auch ein Large Language Model (LLM) verbinden. Lesen Sie <a href="https://www.elastic.co/docs/explore-analyze/ai-features/llm-guides/llm-connectors">diese Dokumentationsseite</a>, um sich über die verschiedenen Optionen zu informieren.</p><p>Wenn Sie Elastic Cloud (oder serverless) verwenden, verfügen Sie bereits über eine vorgefertigte LLM-Verbindung.</p><h2>Installieren Sie die Elasticsearch-Erweiterung</h2><p>Sie können die Elasticsearch-Erweiterung für Gemini CLI mit folgendem Befehl installieren:</p>gemini extensions install https://github.com/elastic/gemini-cli-elasticsearch<p>Sie können überprüfen, ob die Erweiterungen erfolgreich installiert wurden, indem Sie Gemini öffnen und den folgenden Befehl ausführen:</p>/extensions list<p>Die Elasticsearch-Erweiterung sollte verfügbar sein.</p><p>Wenn Sie die MCP-Integration verwenden möchten, müssen Sie die Elasticsearch-Version 9.3 oder höher installiert haben. Sie benötigen die URL Ihres MCP-Servers aus <a href="https://www.elastic.co/kibana">Kibana</a>:</p><ul><li><p>Sie erhalten Ihre MCP-Server-URL unter Agenten &gt; Alle Tools anzeigen &gt; MCP verwalten &gt; MCP-Server-URL kopieren.</p></li><li><p>Die URL wird so aussehen: https://your-kibana-instance/api/agent_builder/mcp</p></li></ul><p>Sie benötigen die URL des Elasticsearch-Endpoints. Dies wird üblicherweise oben auf der Kibana Elasticsearch-Seite angezeigt. Wenn Sie Elasticsearch mit <code>start-local</code> ausführen, ist der Endpoint bereits im Schlüssel <code>ES_LOCAL_URL</code> in der .env-Datei <code>start-local</code> hinterlegt.</p><p>Sie benötigen auch einen API-Schlüssel. Wenn Sie Elasticsearch mit <code>start-local</code> ausführen, ist der <code>ES_LOCAL_API_KEY</code> in der .env-Datei <code>start-local</code> hinterlegt. Andernfalls können Sie einen API-Schlüssel über die Kibana-Schnittstelle erstellen, wie <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elasticsearch-api-keys">hier</a> beschrieben:</p><ul><li><p>In Kibana: Stack Management &gt; Sicherheit &gt; API-Schlüssel &gt; API-Schlüssel erstellen.</p></li><li><p>Wir empfehlen, nur die Leserechte für den API-Schlüssel festzulegen und so die <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/permissions#grant-access-with-roles">hier</a> beschriebene Berechtigung <code>feature_agentBuilder.read</code> zu aktivieren.</p></li><li><p>Kopieren Sie den codierten API-Schlüsselwert.</p></li></ul><p>Stellen Sie die erforderlichen Umgebungsvariablen in Ihrer Shell ein:</p>export ELASTIC_URL="your-elasticsearch-url"
export ELASTIC_MCP_URL="your-elasticsearch-mcp-url"
export ELASTIC_API_KEY="your-encoded-api-key"<h2>Installieren Sie den Beispieldatensatz</h2><p>Sie können den Datensatz für <strong>E-Commerce-Bestellungen </strong>, der von Kibana verfügbar ist, installieren. Sie enthält einen einzigen Index mit dem Namen <strong><code>kibana_sample_data_ecommerce</code></strong>, der Informationen für 4.675 Bestellungen von einer E-Commerce-Website enthält. Für jede Bestellung haben wir folgende Informationen:</p><ul><li><p>Kundeninformationen (Name, Ausweis, Geburtsdatum, E-Mail-Adresse und mehr)</p></li><li><p>Bestelldatum</p></li><li><p>Bestell-ID</p></li><li><p>Produkte (Liste aller Produkte mit Preis, Menge, ID, Kategorie, Rabatt und weiteren Details)</p></li><li><p>SKU</p></li><li><p>Gesamtpreis (ohne Steuern, mit Steuern)</p></li><li><p>Gesamtmenge</p></li><li><p>Geoinformationen (Stadt, Land, Kontinent, Ort, Region)</p></li></ul><p>Um die Beispieldaten zu installieren, öffnen Sie die Seite <strong>Integrationen</strong> in Kibana (suchen Sie in der Suchleiste oben nach „Integration") und installieren Sie die <strong>Beispieldaten</strong>. Weitere Einzelheiten finden Sie in der Dokumentation <a href="https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana">hier</a>.</p><p>Ziel dieses Artikels ist es, zu zeigen, wie einfach es ist, die Gemini CLI so zu konfigurieren, dass sie mit Elasticsearch verbunden ist und mit dem Index <strong><code>kibana_sample_data_ecommerce</code></strong> interagiert.</p><h2>Verwendung des Elasticsearch MCP</h2><p>Sie können die Verbindung mit folgendem Befehl in Gemini überprüfen:</p>/mcp list<p>Sie sollten sehen, dass <strong><code>elastic-agent-builder</code></strong> aktiviert ist, wie in Abbildung 2 dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt52b85e7255360f3b/6a17072da929cf33d3ae08f5/1508423bc1d1bc3c04a1cb01e2d59495a3516ed1-1465x844.png" alt="Der `elastic-agent-builder` MCP-Server mit der Liste der Tools." /><p>Elasticsearch bietet eine Reihe von Standardtools. Sehen Sie sich die Beschreibung <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/tools/builtin-tools-reference">hier</a> an.</p><p>Mithilfe dieser Tools können Sie mit Elasticsearch interagieren und Fragen stellen wie:</p><ul><li><p><code>Give me the list of all the indexes available in Elasticsearch.</code></p></li><li><p><code>How many customers are based in the USA in the kibana_sample_data_ecommerce index of Elasticsearch?</code></p></li></ul><p>Je nach Frage wird Gemini eines oder mehrere der verfügbaren Tools verwenden, um sie zu beantworten.</p><h2>Die /elastic-Befehle</h2><p>In der Elasticsearch-Erweiterung für Gemini CLI haben wir auch<strong><code>/elastic</code></strong>-Befehlehinzugefügt.</p><p>Wenn Sie den Befehl <strong><code>/help</code></strong> ausführen, werden Ihnen alle verfügbaren <code>/elastic</code>-Optionen angezeigt (Abbildung 3):</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt741c7451ecab10d2/6a17072ea6c2b9ccd6e79643/5b2a0727ce7a04354878dd048253d3f4d062324b-1983x230.png" alt="Die verfügbaren „/elastic“-Befehle." /><p>Diese Befehle können nützlich sein, wenn Sie ein bestimmtes Tool des <code>elastic-agent-builder</code>-MCP-Servers direkt ausführen möchten. Beispielsweise können Sie mit dem folgenden Befehl das Mapping von <code>kibana_sample_data_ecommerce</code> abrufen:</p>/elastic:get-mapping kibana_sample_data_ecommerce<p>Diese Befehle sind im Wesentlichen Abkürzungen für das Ausführen spezifischer Tools, anstatt sich auf das Gemini-Modell zu verlassen, um zu bestimmen, welches Tool aufgerufen werden sollte.</p><h2>Verwendung der Elasticsearch-Fähigkeiten</h2><p>Diese Erweiterung beinhaltet außerdem eine <a href="https://github.com/elastic/gemini-cli-elasticsearch/tree/main/skills/esql">agentische Fähigkeit für ES|QL</a>, die in Elasticsearch verfügbare <a href="https://www.elastic.co/docs/explore-analyze/discover/try-esql">Elasticsearch Query Language</a>. <a href="https://agentskills.io/home">Agentische Fähigkeiten</a> stellen ein offenes Format dar, das KI-Coding-Agenten wie Gemini CLI individuelle Anweisungen für bestimmte Aufgaben gibt. Sie verwenden ein Konzept namens <em>Progressive Disclosure</em> (progressive Offenlegung), was bedeutet, dass der anfänglichen Systemaufforderung nur eine kurze Beschreibung der Fähigkeit hinzugefügt wird. Wenn Sie den Agenten bitten, eine Aufgabe auszuführen, wie etwa eine Abfrage an Elasticsearch, passt er die Anfrage an die relevante Fähigkeit an und lädt dynamisch die detaillierten Anweisungen. Dies ist eine effiziente Methode, um Token-Budgets zu verwalten und der KI genau den Kontext bereitzustellen, den sie benötigt.</p><p>Die <strong><code>esql</code></strong>-<strong>Fähigkeit</strong> ist so konzipiert, dass Gemini CLI ES|QL-Abfragen direkt in Ihrem Cluster schreiben und ausführen kann. ES|QL ist eine leistungsstarke Abfragesprache, die die Datenexploration, die Log-Analyse und die Aggregationen sehr intuitiv macht. Wenn diese Fähigkeit aktiviert ist, müssen Sie nicht nach der ES|QL-Syntax suchen; Sie können der Gemini CLI einfach Fragen zu Ihren Daten in natürlicher Sprache stellen, und der Agent kümmert sich um den Rest.</p><p>Die Ausführung erfolgt mit einfachen <a href="https://curl.se/">curl</a>-Befehlen, die in einem Terminal ausgeführt werden. Dies ist möglich, da Elasticsearch eine umfangreiche Sammlung von REST APIs bereitstellt, die sich problemlos in jede beliebige Architektur integrieren lassen.</p><p><strong>Was die </strong><strong><code>esql</code></strong><strong> Fähigkeit bietet:</strong></p><ul><li><p><strong>Erkennung von Indizes und Schemata:</strong> Der Agent kann die integrierten Tools der Fähigkeit nutzen, um verfügbare Indizes aufzulisten und Feld-Mappings abzurufen. Bevor der Agent beispielsweise eine Abfrage für die E-Commerce-Datensätze schreibt, kann er eine Schema-Prüfung für <strong><code>kibana_sample_data_ecommerce</code></strong> ausführen, um die verfügbaren Felder wie <strong><code>taxful_total_price</code></strong> oder <strong><code>category</code></strong> zu ermitteln.</p></li><li><p><strong>Nahtlose Übersetzung natürlicher Sprache:</strong> Diese Fähigkeit bietet dem Agenten mehr als nur ein einfaches Nachschlagewerk; sie liefert eine konkrete Anleitung zur Interpretation der Nutzerabsicht. Wenn Sie Anfragen in natürlicher Sprache eingeben, wie „Zeige durchschnittliche Reaktionszeit gruppiert nach Service“, nutzt der Agent die in der Fähigkeit integrierte Mustererkennung, um Ihre Worte sofort in die richtigen ES|QL-Aggregationen, Filter und Befehle umzuwandeln.</p></li><li><p><strong>Selbstkorrektur:</strong> Wenn eine Abfrage fehlschlägt (zum Beispiel wegen eines Typfehlers oder eines Syntaxfehlers), gibt die Fähigkeit die generierte Abfrage zusammen mit der genauen Elasticsearch-Fehlermeldung zurück, sodass der Agent die Abfrage sofort beheben und erneut ausführen kann, ohne dass Sie eingreifen müssen.</p></li></ul><p>Da die <code>esql</code>-Fähigkeit auch als Tool auf dem <code>elastic-agent-builder</code>-MCP-Server verfügbar ist, müssen wir diesen Server vorübergehend deaktivieren. Sie können sie mit dem folgendem Befehl deaktivieren:</p>/mcp disable elastic-agent-builder<p>Dann können Sie einfach einen Befehl wie diesen in Ihre Gemini CLI eingeben:</p>Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index<p>Der Agent wird:</p><ul><li><p>Die Notwendigkeit der <code>esql</code>-Fähigkeit erkennen</p></li><li><p>Überprüfen Sie das Schema von <strong><code>kibana_sample_data_ecommerce</code></strong>.</p></li><li><p>Eine ES|QL-Abfrage erstellen wie: <code>FROM kibana_sample_data_ecommerce | STATS total_revenue = SUM(taxful_total_price) BY category.keyword | SORT total_revenue DESC | LIMIT 5</code></p></li><li><p>Die Abfrage über die Elasticsearch-API ausführen</p></li><li><p>Das Ergebnis Ihnen direkt im Terminal anzeigen</p></li></ul><p>Hier haben wir ein Beispiel für die Antwort von Gemini auf die vorherige Eingabe aufgeführt:</p>───────────────────────────────────────────────────────────
&gt; Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index   ───────────────────────────────────────────────────────────
✓  Activate Skill "esql": Interact with Elasticsearch using ES|QL and curl. Use when querying, managing indices,  …
Skill esql activated. Resources loaded from /home/user/.gemini/extensions/elasticsearch/skills/esql: 
Showing up to 200 items (files + folders).                                                                     /home/user/.gemini/extensions/elasticsearch/skills/esql/                                                            ├───SKILL.md 
└───references/
├───esql-reference.md 
├───generation-tips.md 
└───query-patterns.md

✦ I will start by exploring the mapping of the kibana_sample_data_ecommerce index to identify the fields for product category and sales revenue. Then, I will construct and execute an ES|QL query to determine the top 5 product categories by total sales revenue.

✓  Shell curl -s "${ELASTIC_URL%/}/kibana_sample_data_ecommerce/_mapping" -H "Authorization: ApiKey $(printenv ELAS…                                                                                                                       {  
   "kibana_sample_data_ecommerce": { 
     "mappings": { 
       "properties": {
         "category": { 
           "type": "text", 
           "fields": {
             "keyword": {
               "type": "keyword"
             }
           }
         }, 
         "currency": {
           "type": "keyword"
         }, 

✦ Okay, I have the mapping. The category is products.category.keyword and sales revenue is taxful_total_price. I'll now execute the ES|QL query to get the top 5 categories by revenue.

✓  Shell curl -s -X POST "${ELASTIC_URL%/}/_query" \  -H "Authorization: ApiKey $(printenv ELASTIC_API_KEY)" \  -H …
{ 
   "took": 62,
   "is_partial": false, 
   "completion_time_in_millis": 1772805644164,
   "documents_found": 4675,
   "values_loaded": 12084, 
   "start_time_in_millis": 1772805644102, 
   "expiration_time_in_millis": 1773237644087,  
   "columns": [ 
     { 
       "name": "total_revenue",    
       "type": "double"  
     }, 
     {   
       "name": "products.category.keyword",

✦ The query for top 5 product categories by revenue was successful. I'll format the returned JSON values into a   user-friendly list.

 ✓  Shell 
                             
 Top 5 product categories by total sales revenue: 
 1. Men's Clothing: 149393.91
 2. Women's Clothing: 135099.91
 3. Women's Shoes: 105479.17
 4. Men's Shoes: 91797.92
 5. Women's Accessories: 60830.31 

✦ I've found the answer; now I'll format it for clarity.

 ✓  Shell 

 Here are the top 5 product categories by total sales revenue:                                                        
                                                                      
 | Rank | Category              | Total Revenue | 
 |------|-----------------------|---------------| 
 | 1    | Men's Clothing        | 149,393.91    |
 | 2    | Women's Clothing      | 135,099.91    |
 | 3    | Women's Shoes         | 105,479.17    |
 | 4    | Men's Shoes           | 91,797.92     | 
 | 5    | Women's Accessories   | 60,830.31     | 

✦ I've formatted and presented the answer. I'm finished.
 ───────────────────────────────────────────────────────────<p>Es ist interessant festzustellen, wie das Gemini-Modell die endgültige Antwort generiert, indem es alle Schritte zeigt, die es dabei durchläuft. Hier können Sie deutlich den Einfluss der Fähigkeit auf den Denkprozess des Modells erkennen. Wenn das Modell zum ersten Mal erkennt, dass es eine Fähigkeit verwenden oder einen Shell-Befehl ausführen muss, erfragt es die Genehmigung mithilfe des Human-in-the-Loop-Ansatzes.</p><p>Durch die Übernahme der aufwendigen Aufgaben der Schemaerkennung, Abfragegenerierung und -ausführung ermöglicht Ihnen die <code>esql</code>-Fähigkeit, sich voll und ganz auf die Antworten zu konzentrieren, anstatt auf die Mechanismen ihrer Ermittlung. Sie erhalten die Daten, die Sie benötigen, richtig formatiert und direkt in Ihrem Terminal, ohne jemals eine einzige Zeile Syntax zu schreiben oder zu einer anderen Anwendung zu wechseln.</p><h2>Fazit</h2><p>In diesem Artikel haben wir die kürzlich veröffentlichte Elasticsearch-Erweiterung für die Gemini CLI vorgestellt. Mit dieser Erweiterung können Sie über Gemini und den von Elastic Agent Builder bereitgestellten Elasticsearch-MCP-Server, der ab Version 9.3.0 verfügbar ist, sowie über den Befehl <code>/elastic</code> mit Ihrer Elasticsearch-Instanz interagieren.</p><p>Darüber hinaus enthält die Erweiterung auch eine <code>esql</code>-Fähigkeit, die die Anfrage eines Nutzers von der natürlichen Sprache in eine ES|QL-Abfrage umwandelt. Diese Fähigkeit kann besonders nützlich sein, wenn der MCP-Server nicht genutzt werden kann, da die zugrundeliegende Kommunikation durch einfache Curl-Befehle in einem Terminal gesteuert wird. Elasticsearch bietet eine umfangreiche Auswahl an REST APIs, die leicht in jedes Projekt integriert werden können. Dies ist besonders nützlich bei der Entwicklung von agentischen KI-Anwendungen.</p><p>Weitere Informationen zu unserer Gemini CLI-Erweiterung finden Sie <a href="https://github.com/elastic/gemini-cli-elasticsearch">hier</a> im Projekt-Repository.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/gemini-cli-extension-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/gemini-cli-extension-elasticsearch</guid>
    <category><![CDATA[Integrationen]]></category>
    <category><![CDATA[Agentische KI]]></category>
    <dc:creator><![CDATA[Walter Rafelsberger,Enrico Zimuel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4ff43abe550941b4/6a17072ba29299fc2ad00fa4/6dfcec4a77b3dc83bf0d974417bf2e211abb1f4f-876x468.png" length="0" type="image/png"/>
    <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Einführung der Elasticsearch-Unterstützung in der Google MCP Toolbox for Databases]]></title>
    <description><![CDATA[Erfahren Sie, wie die Unterstützung für Elasticsearch jetzt in der Google MCP Toolbox for Databases verfügbar ist, und nutzen Sie ES|QL-Tools, um Ihren Index sicher mit jedem MCP-Client zu integrieren.]]></description>
    <content:encoded><![CDATA[<p>In diesem Artikel zeigen wir Ihnen, wie Sie die Google MCP Toolbox mit <a href="https://github.com/elastic/elasticsearch">Elasticsearch</a> nutzen, um ein einfaches Tool zur Extraktion von Informationen aus einem Elasticsearch-Index zu erstellen.</p><p>Wir haben vor Kurzem zum Open-Source-Projekt <a href="https://github.com/googleapis/genai-toolbox">Google MCP Toolbox for Databases</a> beigetragen, indem wir Unterstützung für Elasticsearch als Datenbank hinzugefügt haben.</p><p>Mit diesem neuen Feature können Sie jetzt die Google MCP Toolbox verwenden, um eine Verbindung zu Elasticsearch herzustellen und direkt mit Ihren Daten zu „kommunizieren“.</p><h2>Elasticsearch</h2><p>Wir benötigen eine laufende Elasticsearch-Instanz. Sie können eine kostenlose Testversion auf <a href="https://www.elastic.co/cloud">Elastic Cloud</a> aktivieren oder es lokal mit dem <a href="https://github.com/elastic/start-local">start-local-Skript</a> installieren:</p>curl -fsSL https://elastic.co/start-local | sh<p>Dadurch werden Elasticsearch und Kibana auf Ihrem Computer installiert und ein API-Schlüssel generiert, der zur Konfiguration der Google MCP Toolbox verwendet wird.</p><p>Der API-Schlüssel wird als Ausgabe des vorherigen Befehls angezeigt und in einer .env-Datei im Ordner elastic-start-local gespeichert.</p><h2>Installieren Sie den Beispieldatensatz</h2><p>Nach der Installation können Sie sich mit dem Benutzernamen <em>elastic</em> und dem vom start-local-Skript generierten Passwort (gespeichert in einer .env-Datei) bei Kibana anmelden.</p><p>Sie können den Datensatz für <strong>E-Commerce-Bestellungen </strong>, der von Kibana verfügbar ist, installieren. Sie enthält einen einzigen Index namens <strong>kibana_sample_data_ecommerce</strong>, der Informationen über 4.675 Bestellungen von einer E-Commerce-Website enthält. Für jede Bestellung haben wir folgende Informationen:</p><ul><li><p>Kundeninformationen (Name, Ausweis, Geburtsdatum, E-Mail-Adresse usw.)</p></li><li><p>Bestelldatum</p></li><li><p>Bestell-ID</p></li><li><p>Produkte (Liste aller Produkte mit Preis, Menge, ID, Kategorie, Rabatt usw.)</p></li><li><p>SKU</p></li><li><p>Gesamtpreis (ohne Steuern, mit Steuern)</p></li><li><p>Gesamtmenge</p></li><li><p>Geoinformationen (Stadt, Land, Kontinent, Ort, Region)</p></li></ul><p>Um die Beispieldaten zu installieren, öffnen Sie die Seite <strong>Integrationen</strong> in Kibana (suchen Sie in der Suchleiste oben nach „Integration“) und installieren Sie die „Beispieldaten“. Weitere Details finden Sie in der Dokumentation hier: <a href="https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana">https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana</a>.</p><p>Ziel dieses Artikels ist es, zu zeigen, wie einfach es ist, die Google MCP Toolbox so zu konfigurieren, dass sie sich mit Elasticsearch verbindet und mit dem <strong>kibana_sample_data_ecommerce-Index</strong> in natürlicher Sprache interagiert.</p><h2>Google MCP Toolbox</h2><p>Die Google MCP Toolbox ist ein Open-Source-MCP-Server, der entwickelt wurde, um Anwendungen und KI-Agenten die sichere und effiziente Interaktion mit Datenbanken zu erleichtern. Das Projekt, das zuvor unter dem Namen „GenAI Toolbox for Databases“ bekannt war, wurde nach der vollständigen Kompatibilität mit dem <a href="https://www.anthropic.com/news/model-context-protocol">Model Context Protocol</a> (MCP) umbenannt. Ziel ist es, den üblicherweise beim Verbinden von Agenten mit Datenbanken erforderlichen hohen Aufwand zu reduzieren, indem Verbindungspooling, Authentifizierung, Beobachtbarkeit und andere betriebliche Belange im Hintergrund übernommen werden.</p><p>Im Kern ermöglicht es die Toolbox Entwicklern, wiederverwendbare, hochwertige Werkzeuge zu definieren, die Datenbankinteraktionen kapseln. Diese Tools können dann von jedem MCP-kompatiblen Client – wie beispielsweise einem KI-Agenten – aufgerufen werden, ohne dass der Client Low-Level-SQL-Abfragen implementieren oder Datenbankverbindungen verwalten muss. Dieser Ansatz reduziert die Menge an Boilerplate-Code, die für den Aufbau datenbankbewusster Agenten benötigt wird, drastisch und ermöglicht die Integration fortgeschrittener Datenoperationen in nur wenigen Anwendungszeilen. Sobald ein Werkzeug definiert ist, kann es von mehreren Agenten, Frameworks oder Sprachen gemeinsam genutzt werden (Abbildung 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte90070297ee83546/6a16fa29964cea694b08b972/137cea290bb70ad5da21853f9a6358cef4cf7451-1248x1056.png" alt="" /><p>Ein großer Vorteil der Nutzung der Toolbox ist das integrierte Sicherheitsmodell. Authentifizierungsabläufe wie OAuth2 und OIDC werden nativ unterstützt, sodass Entwickler:innen die Verarbeitung oder Speicherung sensibler Datenbankzugangsdaten in Agenten vermeiden können. Die Plattform bietet außerdem Beobachtbarkeit-Features – einschließlich Metriken und Tracing – über OpenTelemetry, was für Debugging, Monitoring und Deployments in der Produktionsumgebung unerlässlich ist. Insgesamt dient die MCP Toolbox als einheitliche, sichere und erweiterbare Schnittstelle zur Interaktion mit Ihren Daten von jedem MCP-fähigen System.</p><h2>So installieren Sie die MCP Toolbox</h2><p>Sie können den MCP-Toolbox-Server unter Linux mit folgendem Befehl installieren:</p>export VERSION=0.21.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox<p>Für eine Installation unter macOS oder Windows können Sie den <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server">hier</a> beschriebenen Anweisungen folgen.</p><h2>Toolbox für Elasticsearch konfigurieren</h2><p>Um die MCP Toolbox für Elasticsearch zu konfigurieren, müssen wir eine <strong>tools.yaml</strong>-Datei erstellen, und zwar wie folgt:</p>sources:
  my-cluster:
    kind: elasticsearch
    addresses:
      - http://localhost:9200
    apikey: &lt;insert-here-api-key&gt;

tools:
  customer-orders:
    kind: elasticsearch-esql
    source: my-cluster
    description: Get the orders made by a customer identified by name.
    query: |
    	FROM kibana_sample_data_ecommerce | WHERE MATCH(customer_full_name, ?name, {"operator": "AND"})
    parameters:
      - name: name
        type: string
        description: The customer name.

toolsets:
  elasticsearch-tools:
    - customer-orders<p>Sie müssen den Wert <strong>&lt;insert-here-api-key&gt;</strong> durch einen gültigen Elasticsearch-API-Schlüssel ersetzen. Wenn Sie Elasticsearch lokal mit start-local ausführen, finden Sie den API-Schlüssel in der von start-local generierten .env-Datei unter der Variable <strong>ES_LOCAL_API_KEY</strong>. Wenn Sie Elastic Cloud verwenden, können Sie einen API-Schlüssel generieren, indem Sie das <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys">hier</a> beschriebene Verfahren befolgen.</p><p>Die vorherigen Tools enthalten die folgende ES|QL-Abfrage für Elasticsearch:</p><p>Falls Ihnen ES|QL nicht geläufig ist: Es handelt sich um eine von Elastic entwickelte Abfragesprache, die ähnlich wie SQL funktioniert und mit der man einen oder mehrere Indizes durchsuchen kann. Mehr über ES|QL finden Sie in der offiziellen Dokumentation <a href="https://www.elastic.co/docs/reference/query-languages/esql">hier</a>.</p><p>Die obige Abfrage sucht nach allen im <strong>kibana_sample_data_ecommerce-Index</strong> gespeicherten Bestellungen, die den Namen des:der angegebenen Kund:in enthalten, und verwendet den <strong>?name-Parameter</strong> (das Fragezeichen bezeichnet einen Parameter).</p><p>Der Name des Kunden wird in der vorherigen YAML-Konfiguration mit dem Typ „Zeichenfolge“ und der Beschreibung „Der Name des Kunden“ definiert.</p><p>Mit diesem Tool können Fragen zu den Bestellungen eines:einer Kund:in beantwortet werden – zum Beispiel: <em>Wie viele Bestellungen hat Kund:in Foo im Oktober 2025 aufgegeben?</em></p><p>Die Beschreibungen der Werkzeuge und ihrer Parameter sind unerlässlich, um die relevanten Informationen aus der natürlichsprachlichen Anfrage des:der Nutzer:in zu extrahieren. Diese Extraktion erfolgt mithilfe der <strong>Funktionsaufruf-Funktion</strong> eines Large Language Models (LLM). In der Praxis kann ein LLM bestimmen, welche Funktion (welches Werkzeug) ausgeführt werden muss, um die notwendigen Informationen zu erhalten, sowie die entsprechenden Parameter für diese Funktion.</p><p>Für weitere Informationen zu Funktionsaufrufen empfehlen wir, den Artikel <a href="https://www.elastic.co/search-labs/blog/function-calling-with-elastic">OpenAI Function Calling with Elasticsearch</a> von Ashish Tiwari zu lesen.</p><h2>Führen Sie den Toolbox-Server aus</h2><p>Sie können die MCP Toolbox unter Verwendung der vorherigen tools.yaml-Datei mit folgendem Befehl ausführen:</p>./toolbox --tools-file tools.yaml --ui<p>Der Parameter<strong> –ui</strong> führt eine Webanwendung unter <a href="http://127.0.0.1:5000/ui">http://127.0.0.1:5000/ui</a> aus (Abbildung 2).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0fb3953fae603572/6a16fa2aa6c2b92763e794fb/3caf2339b632bafd5847af1ed8b33b518a25b8a2-1600x314.png" alt="" /><p>Sie können die Option <strong>Tools</strong> &gt; <strong>customer-orders</strong> auswählen und im Feld <strong>Parametername</strong> einen Kundennamen eingeben (z. B. Gwen Sanders) und anschließend auf die Schaltfläche <strong>Tool ausführen</strong> klicken. Sie sollten eine JSON-Reaktion sehen, wie in Abbildung 3 dargestellt.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltca02df8c78cb39ff/6a16fa2c961e6909b5c4cd22/b167e0142afb8919d9cedf6d0fa431d33d0e55f8-1600x933.png" alt="" /><p>Die Einrichtung ist abgeschlossen, und die MCP Toolbox kann das Tool <strong>customer-orders</strong> ausführen, um mit Elasticsearch zu kommunizieren und dabei die ES|QL-Anfrage auszuführen.</p><h2>Verwendung der MCP Toolbox mit Gemini CLI</h2><p>Wir können jeden beliebigen MCP-Client verwenden, um mit der MCP Toolbox für Datenbanken zu kommunizieren. Zum Beispiel können wir <a href="https://github.com/google-gemini/gemini-cli">Gemini CLI</a> verwenden, ein Befehlszeilen-Tool zur Nutzung von Gemini. Sie können die Gemini CLI gemäß den <a href="https://geminicli.com/docs/get-started/installation/">hier</a> beschriebenen Anweisungen installieren.</p><p>Gemini CLI bietet eine vorkonfigurierte Erweiterung für die MCP Toolbox an, verfügbar unter <a href="https://github.com/gemini-cli-extensions/mcp-toolbox">gemini-cli-extensions/mcp-toolbox</a>. Sie können diese Erweiterung installieren, indem Sie folgenden Befehl ausführen:</p>gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox<p>Nach der Installation müssen Sie in das Verzeichnis gehen, in dem Sie die Konfigurationsdatei tools.yaml für die MCP Toolbox gespeichert haben, und Gemini CLI wie folgt ausführen (dieser Schritt ist erforderlich, damit die Gemini-CLI automatisch mit der MCP-Toolbox konfiguriert wird):</p>gemini<p>In Abbildung 4 sollten Sie eine Ausgabeanzeige sehen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf7245c10b9e32cd6/6a16fa2d964cea073208b976/0f22df6d3da13c1dc50dcb560414fa7c630eb9a7-1434x341.png" alt="" /><p>Mit dem folgenden Befehl können Sie überprüfen, ob die MCP Toolbox verbunden ist:</p>/mcp list<p>Sie sollten die <strong>mcp_toolbox</strong> mit den aufgelisteten Tools<strong> customer-orders</strong> sehen (Abbildung 5).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte857b42dbe604203/6a16fa2f8b73cb531b189e33/97edbc40de9e44f469f6f3a09427532be167de0e-493x155.png" alt="" /><p>Wenn die MCP Toolbox mit der Gemini CLI verbunden ist, können wir nun versuchen, einige Fragen zu stellen, wie zum Beispiel: „ <em>Gib mir die Bestellungen für die Kundin Gwen Sanders</em>.“ Anschließend fordert die Gemini CLI die Berechtigung an, das Tool customer-orders vom Server mcp_toolbox auszuführen (siehe Abbildung 6).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfb7ea752c1a39da7/6a16fa30cdacbfdf937d27ff/c052f3b5e49436903b804280c0065f67ee02444b-1432x284.png" alt="" /><p>Nach der Bestätigung führt Gemini CLI die Anfrage an die MCP Toolbox aus und erhält als Ergebnis eine JSON-Reaktion, die zur Formatierung der Reaktion verwendet wird (Abbildung 7).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb9f6e04987137a9f/6a16fa320811ae2297e9fef7/7ea5128f1705951c2757af6da4b456d394d4a080-1432x734.png" alt="" /><p>Die Reaktion von Gemini CLI wird berichten, dass Gwen Sanders lediglich eine Bestellung über zwei Produkte zum Gesamtpreis von 132 Euro aufgegeben hat.</p><h2>MCP Toolbox SDKs</h2><p>Die Google MCP Toolbox bietet außerdem ein SDK an, um alle Funktionen eines in Go, Python und Javascript geschriebenen Programms abzurufen.</p><p>Das Python SDK ist beispielsweise auf GitHub unter folgender Seite verfügbar: <a href="https://github.com/googleapis/mcp-toolbox-sdk-python">https://github.com/googleapis/mcp-toolbox-sdk-python</a>.</p><p>Wir müssen einen einfachen Agenten erstellen, der mit der MCP Toolbox verbunden werden kann. Wir müssen die folgenden Pakete installieren:</p>pip install toolbox-core
pip install google-adk<p>Und erstellen Sie ein neues Agentenprojekt mit folgendem Befehl:</p>adk create my_agent<p>Dadurch wird ein neues Verzeichnis namens <strong>my_agent</strong> mit einer Datei <strong>agent.py</strong> erstellt.</p><p>Aktualisieren Sie <strong>my_agent/agent.py</strong> mit dem folgenden Inhalt, um eine Verbindung zu Toolbox herzustellen:</p>from google.adk import Agent
from google.adk.apps import App
from toolbox_core import ToolboxSyncClient

client = ToolboxSyncClient("http://127.0.0.1:5000")

root_agent = Agent(
    name='root_agent',
    model='gemini-2.5-flash',
    instruction="You are a helpful AI assistant designed to search information about a dataset of ecommerce orders.",
    tools=client.load_toolset(),
)

app = App(root_agent=root_agent, name="my_agent")<p>Erstellen Sie eine <strong>.env</strong>-Datei mit Ihrem Google API-Schlüssel: </p>echo 'GOOGLE_API_KEY="YOUR_API_KEY"' &gt; my_agent/.env<p>Schließlich können wir den Agenten ausführen und die Ergebnisse beobachten. Um den Agenten auszuführen, können Sie folgenden Befehl ausführen:</p>adk run my_agent<p>Alternativ können Sie ihn über eine Webschnittstelle bereitstellen:</p>adk web --port 8000<p>In beiden Tickets können Sie mit der MCP Toolbox über eine Q&amp;A-Schnittstelle interagieren. Sie können zum Beispiel die vorherige Frage stellen: <em>Geben Sie mir die Bestellungen der Kundin Gwen Sanders</em>.</p><p>Weitere Informationen zu den verschiedenen SDKs finden Sie auf <a href="https://googleapis.github.io/genai-toolbox/sdks/">dieser Dokumentationsseite</a>.</p><h2>Fazit</h2><p>In diesem Artikel haben wir die Elasticsearch-Integration für die Google MCP Toolbox for Databases demonstriert. Mithilfe einer einfachen YAML-Konfigurationsdatei können wir eine Reihe von Tools definieren, die Fragen in natürlicher Sprache mithilfe der ES|QL-Sprache in Elasticsearch-Abfragen übersetzen.</p><p>Wir haben gezeigt, wie man mit dem Datensatz kibana_sample_data_ecommerce interagiert, der Bestellungen von einer Website enthält. Mit dieser Konfigurationsdatei können wir den MCP Toolbox-Server einfach ausführen und uns von jedem MCP-Client aus mit ihm verbinden.</p><p>Abschließend haben wir gezeigt, wie man die Gemini-CLI als Client nutzt, um sich mit der MCP Toolbox for Databases zu verbinden und die in Elasticsearch gespeicherten E-Commerce-Daten abzufragen. Wir haben eine Abfrage in natürlicher Sprache ausgeführt, um Informationen über Bestellungen für eine:n bestimmte:n, namentlich identifizierte:n Kund:in abzurufen.</p><p>Während das MCP-Ökosystem weiter wächst, schafft dieses Muster – leichte Werkzeugdefinitionen mit sicherer, produktionsreifer Infrastruktur – neue Möglichkeiten, immer leistungsfähigere, datenbewusste Agenten mit minimalem Aufwand zu entwickeln. Ob Sie nun lokal mit den Elastic-Beispieldatensätzen experimentieren oder Suchfunktionen in eine größere Anwendung integrieren, die MCP Toolbox bietet eine zuverlässige, erweiterbare Grundlage für die Interaktion mit Ihren Elasticsearch-Daten unter Verwendung natürlicher Sprache.</p><p>Weitere Informationen zur Entwicklung agentischer KI-Anwendungen finden Sie im Artikel <a href="https://search-labs-redesign.vercel.app/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder">Building AI Agentic Workflows with Elasticsearch</a> von Anish Mathur und Dana Juratoni.</p><p>Weitere Informationen über die Google MCP Toolbox finden Sie unter <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/">https://googleapis.github.io/genai-toolbox/getting-started/introduction/.</a></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/google-mcp-toolbox-elasticsearch-support</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/google-mcp-toolbox-elasticsearch-support</guid>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[Agentische KI]]></category>
    <dc:creator><![CDATA[Enrico Zimuel,Laurent Saint-Félix]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt72d49893c51407cf/6a16fa33cf4f2502bab2cf7e/425a48691f436ed47c9bdfaf5d561ac122b2c472-1062x668.png" length="0" type="image/png"/>
    <pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Von ES|QL zu PHP-Objekten]]></title>
    <description><![CDATA[Lernen Sie, wie Sie ES|QL-Abfragen in PHP ausführen und verwalten. Folgen Sie dieser Anleitung, um ES|QL-Ergebnisse einem PHP-Objekt oder einer benutzerdefinierten Klasse zuzuordnen.]]></description>
    <content:encoded><![CDATA[<p>Ab elasticsearch-php <a href="https://github.com/elastic/elasticsearch-php/releases/tag/v8.13.0">v8.13.0</a> können Sie <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL-</a> Abfragen ausführen und das Ergebnis einem PHP-Objekt vom Typ <a href="https://www.php.net/manual/en/class.stdclass.php">stdClass</a> oder einer benutzerdefinierten Klasse zuordnen.</p><h2>ES|QL</h2><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> ist eine neue Elasticsearch-Abfragesprache, die in Elasticsearch 8.11.0 eingeführt wurde. Aktuell ist es als technische Vorschau verfügbar. Es bietet eine leistungsstarke Möglichkeit, in Elasticsearch gespeicherte Daten zu filtern, zu transformieren und zu analysieren.</p><p>Es verwendet "Pipes" (<code>|</code>), um Daten schrittweise zu manipulieren und zu transformieren. Dieser Ansatz ermöglicht es den Benutzern, eine Reihe von Operationen zu erstellen, wobei das Ergebnis einer Operation als Eingabe für die nächste dient, wodurch komplexe Datentransformationen und -analysen möglich werden.</p><p>Die folgende Abfrage gibt beispielsweise die ersten 3 Dokumente (Zeilen) des Index <code>sample_data</code> zurück:</p>FROM sample_data
| LIMIT 3
<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8b0310cb335872b7/6a17d7eab1e113258679f0df/c23aee777bacdf90c63b717fd9458207dfc0511d-864x284.png" alt="ES|QL erzeugt Tabellen" /><h2>Anwendungsfall: ES|QL-Funktionen im offiziellen PHP-Client</h2><p>Um die im offiziellen PHP-Client entwickelten ES|QL-Funktionen zu veranschaulichen, haben wir eine <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/data/books.csv">CSV-Datei</a> mit 81.828 Büchern (54,4 MB) in Elasticsearch gespeichert, die folgende Informationen enthält:</p>Title;Descrition;Author;Year;Publisher;Ratings
<p>Wir haben diese Liste aus dem öffentlich verfügbaren <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews">Datensatz der Amazon-Buchrezensionen</a> extrahiert.</p><p>Wir haben einen <code>books</code> -Index mit den folgenden Elasticsearch-Mappings erstellt:</p>'mappings' : {
    'properties': {
        'title': {
            'type': 'text'
        },
        'description': {
            'type': 'text'
        },
        'author': {
            'type': 'text'
        },
        'year': {
            'type': 'short'
        },
        'publisher': {
            'type': 'keyword'
        },
        'rating': {
            'type': 'half_float'
        }
    }
}
<p>Der Wert <code>rating</code> ist der Durchschnitt der Ranking-Rezensionen aus der 2,9 GB großen Datei <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews?select=Books_rating.csv">Books_rating.csv</a> .</p><p><a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/bulk.php">Hier</a> finden Sie das PHP-Skript, mit dem wir alle Bücher in Elasticsearch per Massenimport importiert haben. Die Massenverarbeitung dauerte 7 Sekunden und benötigte 28 MB RAM unter Verwendung von PHP 8.2.17. Mit dem vorgeschlagenen Mapping beträgt die Indexgröße in Elasticsearch etwa 62 MB.</p><h2>ES|QL-Ergebnisse einem PHP-Objekt oder einer benutzerdefinierten Klasse zuordnen</h2><p>Wir können ES|QL-Abfragen in PHP über den <code>esql()-&gt;query()</code> -Endpunkt ausführen. Das Ergebnis dieser Abfrage ist eine Tabellendatenstruktur. Dies wird in JSON mithilfe der Felder <code>columns</code> und <code>values</code> ausgedrückt. Im Feld <code>columns</code> haben wir die Definitionen <code>name</code> und <code>type</code> .</p><p>Hier ist ein Beispiel für eine ES|QL-Abfrage, um die Top-10-Bücher von Stephen King, sortiert nach den Nutzerbewertungen, abzurufen:</p>$query = &lt;&lt;&lt;EOD
    FROM books
    | WHERE author == "Stephen King"
    | SORT rating DESC
    | LIMIT 10
EOD;

$result = $client-&gt;esql()-&gt;query([
    'body' =&gt; ['query' =&gt; $query]
]);
<p>Das JSON-Ergebnis von Elasticsearch sieht wie folgt aus:</p>{
    "columns": [
        { "name": "author", "type": "text" },
        { "name": "description", "type": "text" },
        { "name": "publisher", "type": "keyword" },
        { "name": "rating", "type": "double" },
        { "name": "title", "type": "text" },
        { "name": "year", "type": "integer" }
    ],
    "values": [
        [
            "Stephen King",
            "The author ...",
            "Turtleback",
            5.0,
            "How writers write",
            2002
        ],
        [
            "Stephen King",
            "In Blockade Billy, a retired coach...",
            "Simon and Schuster",
            5.0,
            "Blockade",
            2010
        ],
        [
            "Stephen King",
            "A chilling collection of twenty horror stories.",
            "Signet Book",
            4.55859375,
            "Night Shift (Signet)",
            1979
        ],
        ...
    ]
}
<p>In diesem Beispiel haben wir 6 Eigenschaften (Autor, Beschreibung, Verlag, Bewertung, Titel, Jahr) zu einem Buch und 10 Ergebnisse, alle Bücher von Stephen King.</p><p>Eine Liste aller in ES|QL unterstützten Datentypen finden Sie <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html#esql-supported-types">hier</a>.</p><p>Das <code>$result</code> -Antwortobjekt kann als Array, als Zeichenkette oder als Objekt aufgerufen werden (siehe <a href="https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#client-usage">hier</a> für weitere Informationen).</p><p>Mithilfe der Objektschnittstelle können wir über Eigenschaften und Indizes auf die Werte zugreifen. Beispielsweise gibt <code>$result-&gt;values[0][4]</code> den Titel (4) des ersten Buches (0) in der Liste zurück, <code>$result-&gt;values[1][3]</code> die Bewertung (3) des zweiten Buches (1) usw. Denken Sie daran, dass der Index eines Arrays in PHP bei Null beginnt.</p><p>Diese Schnittstelle mag für einige Anwendungsfälle ausreichend sein, aber in den meisten Fällen möchten wir als Ergebnis ein Array von Objekten erhalten.</p><p>Um das Ergebnis in ein Array von Objekten abzubilden, können wir die neue <a href="https://github.com/elastic/elasticsearch-php/issues/1398">mapTo()-</a> Funktion von elasticsearch-php verwenden.</p><p>Diese Funktion ist direkt im <a href="https://github.com/elastic/elasticsearch-php/blob/main/src/Response/Elasticsearch.php">Elasticsearch-Antwortobjekt</a> verfügbar. Das bedeutet, Sie können wie folgt darauf zugreifen:</p>$books = $result-&gt;mapTo(); // Array of stdClass
foreach ($books as $book) {
    printf(
        "%s, %s, %d, Rating: %.2f\n",
        $book-&gt;author,
        $book-&gt;title,
        $book-&gt;year,
        $book-&gt;rating
    );
}
<p>Wenn Sie eine benutzerdefinierte Buchklasse haben, können Sie das Ergebnis mithilfe dieser Klasse wie folgt abbilden:</p>class Book
{
    public string $author;
    public string $title;
    public string $description;
    public int $year;
    public float $rating;
}

$books = $result-&gt;mapTo(Book::class); // Array of Book
<p>Wenn Ihre Klasse neben den im ES|QL-Ergebnis enthaltenen Eigenschaften noch weitere Eigenschaften besitzt, funktioniert dies ebenfalls. Die Funktion <code>mapTo()</code> verwendet nur die Eigenschaften, die als Spalten des ES|QL-Ergebnisses zurückgegeben werden.</p><p>Sie können alle in diesem Artikel genannten Beispiele <a href="https://github.com/elastic/elasticsearch-php-examples/tree/main/examples/ESQL">hier</a> herunterladen.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/esql-php-map-object-class</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/esql-php-map-object-class</guid>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[PHP]]></category>
    <dc:creator><![CDATA[Enrico Zimuel]]></dc:creator>
    <pubDate>Mon, 08 Apr 2024 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>