<?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/pt/search-labs/blog/category/php-programming</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/blog/category/php-programming</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/category/php-programming.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 16:08:16 GMT</lastBuildDate>
  <item>
    <title><![CDATA[De objetos ES|QL para PHP]]></title>
    <description><![CDATA[Aprenda como executar e gerenciar consultas ES|QL em PHP. Siga este guia para mapear resultados ES|QL para um objeto PHP ou classe personalizada.]]></description>
    <content:encoded><![CDATA[<p>A partir da <a href="https://github.com/elastic/elasticsearch-php/releases/tag/v8.13.0">versão 8.13.0</a> do elasticsearch-php, você pode executar consultas <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> e mapear o resultado para um objeto PHP da <a href="https://www.php.net/manual/en/class.stdclass.php">classe padrão (stdClass)</a> ou de uma classe personalizada.</p><h2>ES|QL</h2><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> é uma nova linguagem de consulta do Elasticsearch introduzida na versão 8.11.0. Neste momento, está disponível em versão de pré-visualização técnica. Ele oferece uma maneira poderosa de filtrar, transformar e analisar dados armazenados no Elasticsearch.</p><p>Ele utiliza "pipes" (<code>|</code>) para manipular e transformar dados passo a passo. Essa abordagem permite aos usuários compor uma série de operações, onde o resultado de uma operação se torna a entrada para a próxima, possibilitando transformações e análises de dados complexas.</p><p>Por exemplo, a seguinte consulta retorna os 3 primeiros documentos (linhas) do índice <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 produz tabelas" /><h2>Caso de uso: recursos ES|QL no cliente PHP oficial</h2><p>Para ilustrar os recursos do ES|QL desenvolvidos no cliente PHP oficial, armazenamos no Elasticsearch um <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/data/books.csv">arquivo CSV</a> com 81.828 livros (54,4 MB) contendo as seguintes informações:</p>Title;Descrition;Author;Year;Publisher;Ratings
<p>Extraímos esta lista do <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews">conjunto de dados público de avaliações de livros da Amazon</a>.</p><p>Criamos um índice <code>books</code> com os seguintes mapeamentos do Elasticsearch:</p>'mappings' : {
    'properties': {
        'title': {
            'type': 'text'
        },
        'description': {
            'type': 'text'
        },
        'author': {
            'type': 'text'
        },
        'year': {
            'type': 'short'
        },
        'publisher': {
            'type': 'keyword'
        },
        'rating': {
            'type': 'half_float'
        }
    }
}
<p>O valor <code>rating</code> é a média das classificações das avaliações extraídas do arquivo <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews?select=Books_rating.csv">Books_rating.csv</a> de 2,9 GB.</p><p><a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/bulk.php">Aqui</a> você encontra o script PHP que usamos para importar todos os livros em massa para o Elasticsearch. A operação em lote levou 7 segundos e consumiu 28 MB de RAM usando o PHP 8.2.17. Com o mapeamento proposto, o tamanho do índice no Elasticsearch é de aproximadamente 62 MB.</p><h2>Mapear resultados ES|QL para um objeto PHP ou classe personalizada</h2><p>Podemos executar uma consulta ES|QL em PHP usando o endpoint <code>esql()-&gt;query()</code> . O resultado desta consulta é uma estrutura de dados em forma de tabela. Isso é expresso em JSON usando os campos <code>columns</code> e <code>values</code> . No campo <code>columns</code> temos a definição <code>name</code> e <code>type</code> .</p><p>Aqui está um exemplo de consulta ES|QL para recuperar os 10 melhores livros escritos por Stephen King, ordenados pela classificação das avaliações dos usuários:</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>O resultado JSON do Elasticsearch tem a seguinte aparência:</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>Neste exemplo, temos 6 propriedades (autor, descrição, editora, classificação, título, ano) relacionadas a um livro e 10 resultados, todos livros de Stephen King.</p><p>Uma lista de todos os tipos suportados em ES|QL é apresentada <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html#esql-supported-types">aqui</a>.</p><p>O objeto de resposta <code>$result</code> pode ser acessado como uma matriz, uma string ou como um objeto (veja <a href="https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#client-usage">aqui</a> para mais informações).</p><p>Utilizando a interface de objeto, podemos acessar os valores por meio de propriedades e índices. Por exemplo, <code>$result-&gt;values[0][4]</code> retorna o título (4) do primeiro livro (0) da lista, <code>$result-&gt;values[1][3]</code> retorna a pontuação de classificação (3) do segundo livro (1), etc. Lembre-se, o índice de um array em PHP começa em zero.</p><p>Essa interface pode ser suficiente para alguns casos de uso, mas na maioria das vezes preferimos obter um array de objetos como resultado.</p><p>Para mapear o resultado em uma matriz de objetos, podemos usar o novo recurso <a href="https://github.com/elastic/elasticsearch-php/issues/1398">mapTo()</a> do elasticsearch-php.</p><p>Essa função está disponível diretamente no <a href="https://github.com/elastic/elasticsearch-php/blob/main/src/Response/Elasticsearch.php">objeto de resposta do Elasticsearch</a>. Isso significa que você pode acessá-lo da seguinte forma:</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>Se você tiver uma classe Book personalizada, poderá mapear o resultado usando-a, da seguinte forma:</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>Se sua classe tiver outras propriedades além das incluídas no resultado ES|QL, isso também funcionará. A função <code>mapTo()</code> usará apenas as propriedades retornadas como colunas do resultado ES|QL.</p><p>Você pode baixar todos os exemplos relatados neste artigo <a href="https://github.com/elastic/elasticsearch-php-examples/tree/main/examples/ESQL">aqui</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>