Cómo utilizar el motor de búsqueda Elasticsearch con PHP

Elasticsearch es un motor de búsqueda open source que te permite almacenar y buscar datos en tiempo real. Puedes buscar una frase y te devolverá resultados en cuestión de segundos dependiendo de lo extensa que sea la base de datos de Elasticsearch. El motor muestra resultados más rápido que SQL y es uno de los más populares en toda la web. Hay dos maneras de utilizar Elasticsearch con PHP; una es mediante cURL y la otra es utilizando el cliente oficial para PHP de Elasticsearch. En este tutorial te mostraremos como utilizar Elasticsearch utilizando su cliente PHP. Antes de empezar, asegúrate que tienes instalado Elasticsearch en tu máquina local. Así es como puedes hacerlo:

Instalando Elasticsearch para PHP

Vamos a instalarlo utilizando composer. En la carpeta raíz de tu localhost, crea un nuevo directorio y llámalo elastic_php. En dicho directorio, crea un nuevo fichero llamado composer.json y pega el siguiente código en él:

{
	"require": {
		"elasticsearch/elasticsearch": "~2.0"
	}
}

Ejecutar composer install. Ahora que ya lo tenemos instalado, vamos a conectarlo con PHP.

Conectando Elasticsearch con PHP

Ahora vamos a crear un nuevo fichero PHP, al cual llamaremos index.php, dentro del directorio elastic_php. Pega el siguiente código dentro del fichero.

<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
 
if ($client) {
	echo 'connected';
}

Cuando ejecutes este código, obtendrás 1 como salida.

Obteniendo datos de Elasticsearch

Ahora que tenemos un index, vamos a obtener datos de él. Ahora reeemplazamos el código anterior con este que te proporcionamos, en tu index.php, y lo ejecutamos.

<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
 
$params = [
	'index' => 'my_index',
	'type' => 'my_type',
	'id' => 'my_id',
];
 
$response = $client->get($params);
echo $response['_source']['first field'];

Buscando en Elasticsearch

Vamos a buscar algunos datos en Elasticsearch. Abre ahora tu index.php y sobreescríbelo con el siguiente código.

<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
 
$params = [
	'index' => 'my_index',
	'type' => 'my_type',
	'body' => [
		'query' => [
			'match' => [
				'first field' => 'first fiel'
			],
		],
	],
];
 
$response = $client->search($params);
$hits = count($response['hits']['hits']);
$result = null;
$i = 0;
 
while ($i < $hits) {
	$result[$i] = $response['hits']['hits'][$i]['_source'];
	$i++;
}
foreach ($result as $key => $value) {
	echo $value['first field'] . "<br>";
}

Vamos a comprender un poco el código anterior. Cuando buscamos nuestra query en Elasticsearch, este devuelve un montón de resultados incluyendo los resultados de nuestra query específicamente. Necesitamos recuperar nuestros resultados de entre todos y para ello, debemos comprobar cuántos resultados tenemos:

$hits = count($response['hits']['hits']);

Después recuperamos nuestros datos de entre todos los resultados, que siempre serán menos que hits porque es un array.

while ($i < $hits) {
	$result[$i] = $response['hits']['hits'][$i]['_source'];
	$i++;
}

Una vez tenemos todo, podemos mostrar los resultados en el navegador. Ahora ejecuta el código que puedes ver más arriba, para llevar a cabo la búsqueda.

En este tutorial hemos aprendido a conectar Elasticsearch con PHP y cómo guardar y recuperar datos de él. También hemos aprendido a realizar búsquedas con PHP y Elasticsearch. Si hay algo de lo que dudes, por favor déjanos un comentario abajo y trataremos de encontrar la solución.

Fuente: web-development-blog.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP