Passez à la pratique avec Elasticsearch : explorez nos notebooks d’exemples, lancez un essai gratuit sur le cloud ou testez Elastic dès maintenant sur votre machine locale.
À partir d'elasticsearch-php v8.13.0, il est possible d'exécuter des requêtes ES|QL et de mapper le résultat à un objet PHP de stdClass ou d'une classe personnalisée.
ES|QL
ES|QL est un nouveau langage de requête Elasticsearch introduit dans Elasticsearch 8.11.0. Pour l'instant, il est disponible en aperçu technique. Il offre un moyen puissant de filtrer, de transformer et d'analyser les données stockées dans Elasticsearch.
Il utilise les tuyaux "" (|) pour manipuler et transformer les données étape par étape. Cette approche permet aux utilisateurs de composer une série d'opérations, où la sortie d'une opération devient l'entrée de la suivante, ce qui permet des transformations et des analyses de données complexes.
Par exemple, la requête suivante renvoie les 3 premiers documents (lignes) de l'index sample_data:

Cas d'utilisation : Fonctionnalités ES|QL dans le client PHP officiel
Pour illustrer les fonctionnalités ES|QL développées dans le client PHP officiel, nous avons stocké dans Elasticsearch un fichier CSV de 81 828 livres (54,4 Mo) contenant les informations suivantes :
Nous avons extrait cette liste de l' ensemble de données publiques Amazon Books Reviews.
Nous avons créé un index books avec les mappings Elasticsearch suivants :
La valeur rating est la moyenne des avis de classement tirés du fichier Books_rating.csv de 2,9 Go.
Vous trouverez ici le script PHP que nous avons utilisé pour importer en masse tous les livres dans Elasticsearch. L'opération en bloc a pris 7 secondes et 28 Mo de RAM en utilisant PHP 8.2.17. Avec le mappage proposé, la taille de l'index dans Elasticsearch est d'environ 62 Mo.
Mapper les résultats ES|QL vers un objet PHP ou une classe personnalisée
Nous pouvons exécuter une requête ES|QL en PHP en utilisant le point de terminaison esql()->query(). Le résultat de cette requête est une structure de données sous forme de tableau. Ceci est exprimé en JSON à l'aide des champs columns et values. Dans le champ columns, nous avons les définitions name et type.
Voici un exemple de requête ES|QL permettant d'obtenir les 10 meilleurs livres écrits par Stephen King, classés par ordre d'appréciation des utilisateurs :
Le résultat JSON d'Elasticsearch se présente comme suit :
Dans cet exemple, nous avons 6 propriétés (auteur, description, éditeur, note, titre, année) liées à un livre et 10 résultats, tous des livres de Stephen King.
Une liste de tous les types pris en charge dans ES|QL est présentée ici.
L'objet de réponse $result est accessible sous la forme d'un tableau, d'une chaîne de caractères ou d'un objet (voir ici pour plus d'informations).
L'interface objet permet d'accéder aux valeurs à l'aide de propriétés et d'index. Par exemple, $result->values[0][4] renvoie le titre (4) du premier livre (0) de la liste, $result->values[1][3] renvoie le rang (3) du deuxième livre (1), etc. Rappelez-vous que l'index d'un tableau en PHP commence à zéro.
Cette interface peut être suffisante pour certains cas d'utilisation, mais la plupart du temps, nous aimerions avoir un tableau d'objets comme résultat.
Pour convertir le résultat en un tableau d'objets, nous pouvons utiliser la nouvelle fonction mapTo() d'elasticsearch-php.
Cette fonction est disponible directement dans l'objet de réponse Elasticsearch. Cela signifie que vous pouvez y accéder de la manière suivante :
Si vous disposez d'une classe de livre personnalisée, vous pouvez mapper le résultat en l'utilisant, comme suit :
Si votre classe possède d'autres propriétés en plus de celles incluses dans le résultat ES|QL, cela fonctionnera également. La fonction mapTo() n'utilisera que les propriétés renvoyées sous forme de colonnes dans le résultat ES|QL.
Vous pouvez télécharger tous les exemples présentés dans cet article ici.
Questions fréquentes
Qu'est-ce que ES|QL ?
ES|QL est un langage de requête Elasticsearch, qui a été introduit dans Elasticsearch 8.11.0. Il offre un moyen puissant de filtrer, de transformer et d'analyser les données stockées dans Elasticsearch.




