Cliente Elasticsearch para PHP: elasticsearch-php — guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente Elasticsearch para PHP (elasticsearch-php): ferramenta poderosa para busca e análise

\n\n

Elasticsearch é um sistema de busca e análise distribuído, construído sobre o Apache Lucene. Ele permite armazenar, buscar e analisar grandes volumes de dados praticamente em tempo real. Para interagir com o Elasticsearch a partir de aplicações PHP, existe o cliente oficial — elasticsearch-php. Esta biblioteca fornece uma API conveniente para realizar todas as operações: desde a indexação de documentos até consultas de busca complexas e agregações.

\n\n

Neste artigo, abordaremos detalhadamente a instalação, configuração e principais funcionalidades do elasticsearch-php. Você aprenderá como conectar-se a um cluster, criar um índice, adicionar documentos, realizar buscas e usar recursos avançados, como filtragem e agregação de dados.

\n\n

Instalação do elasticsearch-php

\n\n

A biblioteca é distribuída via Composer. Para instalá-la, execute o comando na raiz do seu projeto:

\n\n
composer require elasticsearch/elasticsearch
\n\n

Após a instalação, a dependência aparecerá no arquivo composer.json. Certifique-se de ter o PHP versão 7.4 ou superior instalado, bem como a extensão json.

\n\n

Conexão ao servidor Elasticsearch

\n\n

O primeiro passo é criar o cliente. Para um servidor local (por padrão, o Elasticsearch escuta na porta 9200), o código será assim:

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Elastic\\Elasticsearch\\ClientBuilder;\n\n$client = ClientBuilder::create()\n    ->setHosts(['localhost:9200'])\n    ->build();\n?>
\n\n

Se o seu servidor exigir autenticação (por exemplo, via login/senha ou chave de API), passe os parâmetros:

\n\n
$client = ClientBuilder::create()\n    ->setHosts(['https://user:pass@localhost:9200'])\n    ->setSSLVerification(false) // apenas para desenvolvimento\n    ->build();
\n\n

Trabalhando com índices e documentos

\n\n

O Elasticsearch armazena dados em índices (análogo a tabelas no SQL). Vamos criar um índice products com um mapeamento simples:

\n\n
$params = [\n    'index' => 'products',\n    'body' => [\n        'settings' => [\n            'number_of_shards' => 1,\n            'number_of_replicas' => 0\n        ],\n        'mappings' => [\n            'properties' => [\n                'title' => ['type' => 'text'],\n                'price' => ['type' => 'float'],\n                'description' => ['type' => 'text'],\n                'category' => ['type' => 'keyword']\n            ]\n        ]\n    ]\n];\n\n$response = $client->indices()->create($params);
\n\n

Agora, vamos adicionar alguns documentos:

\n\n
$documents = [\n    ['title' => 'Notebook Dell XPS 15', 'price' => 1200.00, 'description' => 'Ultrabook potente para trabalho', 'category' => 'electronics'],\n    ['title' => 'Livro "PHP para Profissionais"', 'price' => 45.50, 'description' => 'Aprendendo PHP em nível avançado', 'category' => 'books'],\n    ['title' => 'Fones de ouvido Sony WH-1000XM5', 'price' => 350.00, 'description' => 'Fones de ouvido sem fio com cancelamento de ruído', 'category' => 'electronics']\n];\n\nforeach ($documents as $id => $doc) {\n    $params = [\n        'index' => 'products',\n        'id' => $id + 1,\n        'body' => $doc\n    ];\n    $response = $client->index($params);\n}
\n\n

Buscando documentos

\n\n

Vamos realizar uma busca de texto completo no campo title:

\n\n
$params = [\n    'index' => 'products',\n    'body' => [\n        'query' => [\n            'match' => [\n                'title' => 'notebook'\n            ]\n        ]\n    ]\n];\n\n$response = $client->search($params);\n$hits = $response['hits']['hits'];\n\nforeach ($hits as $hit) {\n    echo "ID: " . $hit['_id'] . " | Title: " . $hit['_source']['title'] . "<br>";\n}

Recommendations