Cliente Elasticsearch para PHP (elasticsearch-php): una potente herramienta para búsqueda y análisis
\n\nElasticsearch es un sistema de búsqueda y análisis distribuido, construido sobre Apache Lucene. Permite almacenar, buscar y analizar grandes volúmenes de datos prácticamente en tiempo real. Para interactuar con Elasticsearch desde aplicaciones PHP, existe el cliente oficial — elasticsearch-php. Esta librería proporciona una API conveniente para realizar todas las operaciones: desde la indexación de documentos hasta consultas de búsqueda complejas y agregaciones.
\n\nEn este artículo, analizaremos en detalle la instalación, configuración y las principales capacidades de elasticsearch-php. Aprenderá cómo conectarse a un clúster, crear un índice, agregar documentos, realizar búsquedas y utilizar funciones avanzadas como el filtrado y la agregación de datos.
\n\nInstalación de elasticsearch-php
\n\nLa librería se distribuye a través de Composer. Para instalarla, ejecute el siguiente comando en la raíz de su proyecto:
\n\ncomposer require elasticsearch/elasticsearch\n\nDespués de la instalación, aparecerá la dependencia en el archivo composer.json. Asegúrese de tener instalado PHP versión 7.4 o superior, así como la extensión json.
Conexión al servidor Elasticsearch
\n\nEl primer paso es crear el cliente. Para un servidor local (por defecto, Elasticsearch escucha en el puerto 9200), el código será el siguiente:
\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\nSi su servidor requiere autenticación (por ejemplo, mediante usuario/contraseña o clave API), pase los parámetros:
\n\n$client = ClientBuilder::create()\n ->setHosts(['https://user:pass@localhost:9200'])\n ->setSSLVerification(false) // solo para desarrollo\n ->build();\n\nTrabajo con índices y documentos
\n\nElasticsearch almacena datos en índices (análogo a las tablas en SQL). Creemos un índice products con un mapeo simple:
$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\nAhora agreguemos algunos documentos:
\n\n$documents = [\n ['title' => 'Portátil Dell XPS 15', 'price' => 1200.00, 'description' => 'Ultrabook potente para trabajar', 'category' => 'electronics'],\n ['title' => 'Libro "PHP para profesionales"', 'price' => 45.50, 'description' => 'Aprendizaje de PHP a nivel avanzado', 'category' => 'books'],\n ['title' => 'Auriculares Sony WH-1000XM5', 'price' => 350.00, 'description' => 'Auriculares inalámbricos con cancelación de ruido', '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\nBúsqueda de documentos
\n\nRealicemos una búsqueda de texto completo en el campo title:
$params = [\n 'index' => 'products',\n 'body' => [\n 'query' => [\n 'match' => [\n 'title' => 'portátil'\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']['titl También en la biblioteca
Trabajo con CSV en TypeScript: bibliotecas, análisis y generación de datos
Zod para TypeScript: guía completa con ejemplos
CreateML para Swift: guía completa con ejemplos prácticos