Scout Parte I: Utilizando Laravel Scout

Ejemplo Práctico

En mi articulo anterior se dio una introducción de lo que es Laravel Scout, donde se explico que era y algunas de sus funciones, en este articulo construiremos un ejemplo simple en dos partes para poder probar que tal funciona, si no has leído el articulo anterior mi recomendación es que lo hagas. Recuerda el lema: primero entiende, luego innova (es primordial para que sepas que estas haciendo).

A continuación se tratará el tutorial paso por paso, y al finalizar la parte dos que sera publicada esta misma semana voy a compartir un repositorio en Github donde podrás descargar el ejemplo.

Creación del Proyecto

En primer lugar, para crear un nuevo proyecto en Laravel, basta con tener composer y ejecutar en tu terminal el comando para nuevos proyectos. Para más información: https://laravel.com/docs/5.3#installation

Luego de ejecutar, espera que se descarguen todas las dependencias y se ejecuten los comandos. Recuerda que si estas en Linux tienes que darle permisos a la carpeta bootstrap/cache y a storage. Si utilizas Homestead ya debes saber que no necesitas hacer esto.

Configuración de Base de Datos

Puedes utilizar el motor de Base de Datos de tu preferencia para este ejemplo yo utilice PostgreSQL. Lo primero que debes hacer es crear tu base de datos y luego en tu archivo de variables de entorno (.env) coloca tus datos de acceso.

Ya con esto puedes trabajar sin problema con la Base de Datos.

Instalar Laravel Scout

Aunque ya vimos como instalar Scout en el articulo anterior igualmente lo pondré por motivos de rapidez.

Registra el Provider dentro de tu archivo config/app.php

Finalmente publica los archivos de configuración con el siguiente comando:

Crear Migraciones y Modelos

Para esta pequeña aplicación de ejemplo, vamos a crear un modelo para los Post, esto se hace rápidamente en nuestra consola de comando, le añadimos el flag –m para que además del modelo, nos cree también una migración.

Dentro de nuestro modelo generado debemos utilizar el trait Searchable que nos brinda Scout. Sin olvidar importar el namespace.

Luego en la migración, llenamos con los siguientes datos:

A continuación ejecuta las migraciones usando:

Esto nos creara una tabla en la base de datos llamada posts con los campos de titulo, imagen y descripción.

scout

 

Para poder probar necesitamos tener en nuestra base de datos, algunos registros. Y para ello vamos aprovechar los Model Factories. En nuestra carpeta database/factories y encontraremos un archivo llamado ModelFactory en el mismo vamos a crear un nuevo Factory para el modelo Post usando Faker. Puedes colocarlo abajo del que ya esta creado:

El mismo puedes ejecutarlo a través de tinker (consola de comandos de Laravel php artisan tinker en donde podemos ejecutar todos los métodos de nuestra aplicación):

Para el ejemplo, yo lo agregue dentro de un Seeder para aprovechar otra característica de Laravel. Dentro del archivo database/seeds/DatabaseSeeder.php en el método run coloque el método que puse anteriormente.

Para que se ejecute solo tengo que ir a mi consola y ejecutar:

Esto como podemos leer, usara el Factory que creamos para generar 100 registros dentro de nuestra tabla post.

posts

 

Crear Controlador

Procedemos a crear un Controlador con Artisan para hacer la búsqueda de los registros, el cual llamaremos SearchController. Lo ubicare en una carpeta llamada API.

Nuestro controlador solo va a contener un método llamado search el cual va a recibir un parámetro y ejecutará la consulta para buscar entre los registros de nuestra base de datos usando Scout.

Nota: No olvides importar el namespace del modelo.

Añadir Rutas

Ya que hemos creado el controlador, inmediatamente podemos proceder a crear nuestra ruta dentro del archivo routes/api.php ,y le asignamos un nombre:

Con esto ya tenemos parte del Backend de la aplicación listo, ahora nos toca configurar nuestro driver.

Registro en Algolia

Vamos a proceder a registrarnos en el servicio de Algolia dentro de su pagina web http://algolia.com/ este es el servicio que utiliza Laravel dentro de su documentación para hacer este tipo de búsquedas. Como se menciono en el articulo anterior, el servicio es de pago y dispone de una versión gratuita en la cual podemos tener 10,000 registros y 100,000 operaciones por mes. Mas que suficiente para cualquier aplicación pequeña y puedes registrarte utilizando tu cuenta de Google o Github.

algolia

Luego de registrarte, podrás acceder a un panel de configuración e información el cual utilizaremos en breve.

Instalar y Configurar Algolia SDK

Para instalar Algolia dentro de nuestra aplicación de Laravel, debemos ejecutar en la terminal el siguiente comando para descargar las dependencias del SDK:

Terminado esto, el siguiente paso es añadir a nuestro archivo .env dos nuevas variables en las cuales vamos a colocar el ID de nuestra aplicación y el Admin API Key, los cuales se encuentran en la web de Algolia dentro de API Keys:

apialgolia

Con estos sencillos pasos ya tenemos configurado el servicio en nuestra aplicación.

Importar los datos existentes en la Base de Datos

Debido a que anteriormente cargamos datos en nuestra BD, los mismos necesitan ser indexados, para lograrlo ejecutamos el siguiente comando que nos provee Laravel Scout.

Puedes verificar que los indices se hayan cargado dentro de la web de Algolia, en la zona de indices, además, como resultado del comando en consola tiene que arrojarte un mensaje como el siguiente:

Ya con todo lo que hemos hecho, podemos utilizar nuestra API y probar que todo funcione. En este ejemplo cree un Host Virtual llamado scout.dev y por ello puedo hacer la siguiente petición a nuestra ruta creada anteriormente:

Como resultado, nos debe traer una respuesta en JSON de todos los post que contengan el texto “nobis” en cualquier parte del registro:

scout2

Para finalizar, si has llegado hasta esta parte, y todo ha ido bien, ya tienes configurado y en funcionamiento Laravel Scout. Este tipo de búsquedas son mucho más rápidas y se ven mucho mejor que estar haciendo varios LIKES en SQL. En el siguiente tutorial haremos una vista simple utilizando VueJs para cerrar con este ejemplo. Si no me he logrado explicar bien, o tienes alguna duda o sugerencia puedes dejarla en nuestros comentarios o en su defecto hacer las preguntas en nuestro Slack.

 

 

Comparte este artículo

Entra en la discusión y deja tu comentario

  • roger sosa

    Excelente post! muy bien explicado !

  • Juan Rincón

    y la segunda parte? como retorno todo en una vista?

Veces