Cliente Elasticsearch para PHP: elasticsearch-php. Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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/elasticsearch


Despué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 ROG


Eliminar 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                    

Recommendations