<?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[PHP - 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[PHP - 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/blog/category/php-programming</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/blog/category/php-programming</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/category/php-programming.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 16:47:10 GMT</lastBuildDate>
  <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>