<?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/fr/search-labs/blog/category/php-programming</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/blog/category/php-programming</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/category/php-programming.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 16:08:17 GMT</lastBuildDate>
  <item>
    <title><![CDATA[De ES|QL aux objets PHP]]></title>
    <description><![CDATA[Apprenez à exécuter et à gérer les requêtes ES|QL en PHP. Suivez ce guide pour mapper les résultats ES|QL vers un objet PHP ou une classe personnalisée.]]></description>
    <content:encoded><![CDATA[<p>À partir d'elasticsearch-php <a href="https://github.com/elastic/elasticsearch-php/releases/tag/v8.13.0">v8.13.0</a>, il est possible d'exécuter des requêtes <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> et de mapper le résultat à un objet PHP de <a href="https://www.php.net/manual/en/class.stdclass.php">stdClass</a> ou d'une classe personnalisée.</p><h2>ES|QL</h2><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> 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.</p><p>Il utilise les tuyaux "" (<code>|</code>) 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.</p><p>Par exemple, la requête suivante renvoie les 3 premiers documents (lignes) de l'index <code>sample_data</code>:</p>FROM sample_data
| LIMIT 3
<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8b0310cb335872b7/6a17d7eab1e113258679f0df/c23aee777bacdf90c63b717fd9458207dfc0511d-864x284.png" alt="ES|QL produit des tableaux" /><h2>Cas d'utilisation : Fonctionnalités ES|QL dans le client PHP officiel</h2><p>Pour illustrer les fonctionnalités ES|QL développées dans le client PHP officiel, nous avons stocké dans Elasticsearch un <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/data/books.csv">fichier CSV</a> de 81 828 livres (54,4 Mo) contenant les informations suivantes :</p>Title;Descrition;Author;Year;Publisher;Ratings
<p>Nous avons extrait cette liste de l' ensemble de <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews">données publiques Amazon Books Reviews.</a></p><p>Nous avons créé un index <code>books</code> avec les mappings Elasticsearch suivants :</p>'mappings' : {
    'properties': {
        'title': {
            'type': 'text'
        },
        'description': {
            'type': 'text'
        },
        'author': {
            'type': 'text'
        },
        'year': {
            'type': 'short'
        },
        'publisher': {
            'type': 'keyword'
        },
        'rating': {
            'type': 'half_float'
        }
    }
}
<p>La valeur <code>rating</code> est la moyenne des avis de classement tirés du fichier <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews?select=Books_rating.csv">Books_rating.csv</a> de 2,9 Go.</p><p>Vous trouverez <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/bulk.php">ici</a> 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.</p><h2>Mapper les résultats ES|QL vers un objet PHP ou une classe personnalisée</h2><p>Nous pouvons exécuter une requête ES|QL en PHP en utilisant le point de terminaison <code>esql()-&gt;query()</code>. 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 <code>columns</code> et <code>values</code>. Dans le champ <code>columns</code>, nous avons les définitions <code>name</code> et <code>type</code>.</p><p>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 :</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>Le résultat JSON d'Elasticsearch se présente comme suit :</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>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.</p><p>Une liste de tous les types pris en charge dans ES|QL est présentée <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html#esql-supported-types">ici.</a></p><p>L'objet de réponse <code>$result</code> est accessible sous la forme d'un tableau, d'une chaîne de caractères ou d'un objet (voir <a href="https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#client-usage">ici</a> pour plus d'informations).</p><p>L'interface objet permet d'accéder aux valeurs à l'aide de propriétés et d'index. Par exemple, <code>$result-&gt;values[0][4]</code> renvoie le titre (4) du premier livre (0) de la liste, <code>$result-&gt;values[1][3]</code> renvoie le rang (3) du deuxième livre (1), etc. Rappelez-vous que l'index d'un tableau en PHP commence à zéro.</p><p>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.</p><p>Pour convertir le résultat en un tableau d'objets, nous pouvons utiliser la nouvelle fonction <a href="https://github.com/elastic/elasticsearch-php/issues/1398">mapTo()</a> d'elasticsearch-php.</p><p>Cette fonction est disponible directement dans l'<a href="https://github.com/elastic/elasticsearch-php/blob/main/src/Response/Elasticsearch.php">objet de réponse Elasticsearch</a>. Cela signifie que vous pouvez y accéder de la manière suivante :</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>Si vous disposez d'une classe de livre personnalisée, vous pouvez mapper le résultat en l'utilisant, comme suit :</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>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 <code>mapTo()</code> n'utilisera que les propriétés renvoyées sous forme de colonnes dans le résultat ES|QL.</p><p>Vous pouvez télécharger tous les exemples présentés dans cet article <a href="https://github.com/elastic/elasticsearch-php-examples/tree/main/examples/ESQL">ici.</a></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>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt99f5ab85c0713977/6a17d7ebfbc5f8072b491918/aea56270f48cb64130d1b515b983434e0960dc2f-500x500.png" length="0" type="image/png"/>
    <pubDate>Mon, 08 Apr 2024 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>