Cliente Elasticsearch para PHP: elasticsearch-php
Elasticsearch é um poderoso sistema de busca distribuída e banco de dados analítico, construído sobre o Apache Lucene. Para interagir com ele a partir de aplicações PHP, existe o cliente oficial — elasticsearch-php. Esta biblioteca fornece uma API completa e conveniente para todas as operações: desde a indexação de documentos até consultas complexas de texto completo e agregações.
Instalação e conexão
A instalação é feita via Composer — o gerenciador de pacotes padrão para PHP:
composer require elasticsearch/elasticsearchApós a instalação, é necessário criar uma instância do cliente, informando o host (ou vários hosts) do seu cluster Elasticsearch:
<?phprequire 'vendor/autoload.php';
use Elastic\\Elasticsearch\\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['http://localhost:9200']) ->build();?>Para conexão segura (HTTPS, autenticação), você pode passar parâmetros adicionais:
$client = ClientBuilder::create() ->setHosts(['https://user:password@my-elastic.cloud:9243']) ->setSSLVerification(false) // apenas para testes! ->build();Operações básicas com dados
Criação de índice
Um índice no Elasticsearch é análogo a um banco de dados no SQL. Antes de salvar dados, você pode criá-lo explicitamente com mapeamento:
$params = [ 'index' => 'products', 'body' => [ 'settings' => [ 'number_of_shards' => 1, 'number_of_replicas' => 1 ], 'mappings' => [ 'properties' => [ 'title' => ['type' => 'text'], 'price' => ['type' => 'float'], 'created_at' => ['type' => 'date'] ] ] ]];
$response = $client->indices()->create($params);Indexação de documento (adição/atualização)
Para adicionar um único documento, use o método index:
$params = [ 'index' => 'products', 'id' => '1', 'body' => [ 'title' => 'Notebook ASUS ROG', 'price' => 120000.00, 'created_at' => '2025-01-15' ]];
$response = $client->index($params);Se um documento com esse id já existir, ele será sobrescrito. Para atualização parcial, use update.
Obtenção de documento
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->get($params);$document = $response['_source'];echo $document['title']; // Notebook ASUS ROGExclusão de documento
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->delete($params);Busca e filtragem
A funcionalidade mais poderosa do Elasticsearch é a busca em texto completo. Exemplo de busca de produtos pelo nome:
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'match' => [ 'title' => 'notebook' ] ] ]];
$response = $client->search($params);
// Processamento dos resultadosforeach ($response['hits']['hits'] as $hit) { echo 'ID: ' . $hit['_id'] . ', Title: ' . $hit['_source']['title'] . "";}Você pode combinar condições usando consultas bool:
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ ['match' => ['title' => 'notebook']] ], 'filter' => [ ['range' => ['price' => ['gte' => 50000