Cliente Elasticsearch para PHP: elasticsearch-php
Elasticsearch es un potente sistema de búsqueda distribuida y base de datos analítica, construido sobre Apache Lucene. Para interactuar con él desde aplicaciones PHP, existe el cliente oficial — elasticsearch-php. Esta biblioteca proporciona una API completa y conveniente para todas las operaciones: desde la indexación de documentos hasta consultas complejas de texto completo y agregaciones.
Instalación y conexión
La instalación se realiza a través de Composer, el gestor de paquetes estándar para PHP:
composer require elasticsearch/elasticsearchDespués de la instalación, es necesario crear una instancia del cliente, especificando el host (o varios hosts) de su clúster de Elasticsearch:
<?phprequire 'vendor/autoload.php';
use Elastic\\Elasticsearch\\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['http://localhost:9200']) ->build();?>Para una conexión segura (HTTPS, autenticación), se pueden pasar parámetros adicionales:
$client = ClientBuilder::create() ->setHosts(['https://user:password@my-elastic.cloud:9243']) ->setSSLVerification(false) // solo para pruebas ->build();Operaciones básicas con datos
Creación de un índice
Un índice en Elasticsearch es el equivalente a una base de datos en SQL. Antes de guardar datos, se puede crear explícitamente con un mapeo:
$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);Indexación de un documento (agregar/actualizar)
Para agregar un solo documento se utiliza el método index:
$params = [ 'index' => 'products', 'id' => '1', 'body' => [ 'title' => 'Portátil ASUS ROG', 'price' => 120000.00, 'created_at' => '2025-01-15' ]];
$response = $client->index($params);Si ya existe un documento con ese id, se sobrescribirá. Para una actualización parcial, se utiliza update.
Obtener un documento
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->get($params);$document = $response['_source'];echo $document['title']; // Portátil ASUS ROGEliminar un documento
$params = [ 'index' => 'products', 'id' => '1'];
$response = $client->delete($params);Búsqueda y filtrado
La capacidad más potente de Elasticsearch es la búsqueda de texto completo. Ejemplo de búsqueda de productos por nombre:
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'match' => [ 'title' => 'portátil' ] ] ]];
$response = $client->search($params);
// Procesamiento de resultadosforeach ($response['hits']['hits'] as $hit) { echo 'ID: ' . $hit['_id'] . ', Title: ' . $hit['_source']['title'] . "";}Se pueden combinar condiciones usando consultas bool:
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ ['match' => ['title' => 'portátil']] ], 'filter' => [ ['range' => ['price' => ['gte' => 50000 También en la biblioteca
Monitoreo de aplicaciones PHP: herramientas y bibliotecas para el seguimiento del rendimiento
Gson para Java: guía completa con ejemplos
Análisis de HTML en C++: Reseña de las bibliotecas Gumbo, MyHTML y htmlcxx
prometheus/client_golang para Go: guía completa con ejemplos