Cliente Elasticsearch para PHP (elasticsearch-php): ferramenta poderosa para busca e análise
\n\nElasticsearch é 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\nNeste 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\nInstalação do elasticsearch-php
\n\nA biblioteca é distribuída via Composer. Para instalá-la, execute o comando na raiz do seu projeto:
\n\ncomposer require elasticsearch/elasticsearch\n\nApó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.
Conexão ao servidor Elasticsearch
\n\nO 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\nSe 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\nTrabalhando com índices e documentos
\n\nO Elasticsearch armazena dados em índices (análogo a tabelas no SQL). Vamos criar um índice products com um mapeamento simples:
$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\nAgora, 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\nBuscando documentos
\n\nVamos realizar uma busca de texto completo no campo title:
$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} Também na biblioteca
Trabalhando com arquivos ZIP em Rust: biblioteca zip e guia completo
Trabalho com CSV em PHP: biblioteca SplFileObject e funções integradas
nock para TypeScript: guia completo com exemplos práticos
Config para Rust: guia completo com exemplos práticos