Testen Sie Elasticsearch: Sehen Sie sich unsere Beispiel-Notebooks an, starten Sie eine kostenlose Cloud-Testversion oder testen Sie Elastic jetzt auf Ihrem lokalem Gerät.
Ab elasticsearch-php v8.13.0 können Sie ES|QL- Abfragen ausführen und das Ergebnis einem PHP-Objekt vom Typ stdClass oder einer benutzerdefinierten Klasse zuordnen.
ES|QL
ES|QL 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.
Es verwendet "Pipes" (|), 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.
Die folgende Abfrage gibt beispielsweise die ersten 3 Dokumente (Zeilen) des Index sample_data zurück:

Anwendungsfall: ES|QL-Funktionen im offiziellen PHP-Client
Um die im offiziellen PHP-Client entwickelten ES|QL-Funktionen zu veranschaulichen, haben wir eine CSV-Datei mit 81.828 Büchern (54,4 MB) in Elasticsearch gespeichert, die folgende Informationen enthält:
Wir haben diese Liste aus dem öffentlich verfügbaren Datensatz der Amazon-Buchrezensionen extrahiert.
Wir haben einen books -Index mit den folgenden Elasticsearch-Mappings erstellt:
Der Wert rating ist der Durchschnitt der Ranking-Rezensionen aus der 2,9 GB großen Datei Books_rating.csv .
Hier 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.
ES|QL-Ergebnisse einem PHP-Objekt oder einer benutzerdefinierten Klasse zuordnen
Wir können ES|QL-Abfragen in PHP über den esql()->query() -Endpunkt ausführen. Das Ergebnis dieser Abfrage ist eine Tabellendatenstruktur. Dies wird in JSON mithilfe der Felder columns und values ausgedrückt. Im Feld columns haben wir die Definitionen name und type .
Hier ist ein Beispiel für eine ES|QL-Abfrage, um die Top-10-Bücher von Stephen King, sortiert nach den Nutzerbewertungen, abzurufen:
Das JSON-Ergebnis von Elasticsearch sieht wie folgt aus:
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.
Eine Liste aller in ES|QL unterstützten Datentypen finden Sie hier.
Das $result -Antwortobjekt kann als Array, als Zeichenkette oder als Objekt aufgerufen werden (siehe hier für weitere Informationen).
Mithilfe der Objektschnittstelle können wir über Eigenschaften und Indizes auf die Werte zugreifen. Beispielsweise gibt $result->values[0][4] den Titel (4) des ersten Buches (0) in der Liste zurück, $result->values[1][3] die Bewertung (3) des zweiten Buches (1) usw. Denken Sie daran, dass der Index eines Arrays in PHP bei Null beginnt.
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.
Um das Ergebnis in ein Array von Objekten abzubilden, können wir die neue mapTo()- Funktion von elasticsearch-php verwenden.
Diese Funktion ist direkt im Elasticsearch-Antwortobjekt verfügbar. Das bedeutet, Sie können wie folgt darauf zugreifen:
Wenn Sie eine benutzerdefinierte Buchklasse haben, können Sie das Ergebnis mithilfe dieser Klasse wie folgt abbilden:
Wenn Ihre Klasse neben den im ES|QL-Ergebnis enthaltenen Eigenschaften noch weitere Eigenschaften besitzt, funktioniert dies ebenfalls. Die Funktion mapTo() verwendet nur die Eigenschaften, die als Spalten des ES|QL-Ergebnisses zurückgegeben werden.
Sie können alle in diesem Artikel genannten Beispiele hier herunterladen.
Häufige Fragen
Was ist ES|QL?
ES|QL ist eine Elasticsearch-Abfragesprache, die in Elasticsearch 8.11.0 eingeführt wurde. Es bietet eine leistungsstarke Möglichkeit, in Elasticsearch gespeicherte Daten zu filtern, zu transformieren und zu analysieren.




