Introducción a Laravel Scout

Herramientas de Búsqueda como Algolia, TNTSearch o Elasticsearch han ganado mucha popularidad dentro de la comunidad de Laravel en los últimos años como herramientas poderosas para la indexación y búsqueda de datos. Es por ello que Laravel siempre pensando en la comunidad de sus usuarios, ha sacado a partir de Laravel 5.3 una manera fácil para manejar este tipo de búsquedas, con una sintaxis bastante elegante. A continuación presentamos Laravel Scout.

Introducción a Laravel Scout

Scout es un driver para fulltext search para Eloquent. El mismo hace muy fácil la tarea de indexar y buscar el contenido dentro de los Modelos, inicialmente funcionaba con Algolia y ElasticSearch, pero gracias a muchas contribuciones de parte de la comunidad ya estan disponibles para otros servicios como TNTSearch y hasta uno de Mysql, y aun seguimos en espera de nuevas opciones.

Cabe destacar que por ahora Scout es un paquete externo de Laravel, como es el caso también de Cashier, que tenemos que descargar a través de Composer. Para utilizar basta con añadir un Trait a nuestros modelos para indicarles que debería escuchar a los eventos disparados cuando se modifican las instancias de los modelos y así poder actualizar el índice de búsqueda en respuesta.

Este es un ejemplo de la sintaxis para una búsqueda fulltext:

 

Todo esto se logra con una configuración sin mayor dificultad.

Instalando Scout

Como requerimiento para empezar, debes tener una versión superior a Laravel 5.3, luego descargarte el paquete usando Composer con el siguiente comando:

Y como es normal, debes agregar el Service Provider de Scout dentro de tu archivo de configuración ubicado en config/app.php

El paquete cuenta con un archivo de configuración que tienes que publicar con el siguiente comando:

Y por último debes instalar el driver de tu preferencia, para este artículo usaremos Algolia, que es el servicio que podemos encontrar en la página de la Documentación de Laravel para las búsquedas, este  driver en su versión gratuita solo guarda 10.000 registros y permite solo 100.000, si tienes un proyecto más grande tienes unos planes especiales que podrás buscar en su Web, para  instalar Algolia SDK dentro de su consola ejecutas el siguiente comando de composer:

Preparar Modelo para la indexación

El siguiente paso es ir al archivo donde se encuentra tu modelo e importar el trait de Scout. Para el siguiente ejemplo utilizaremos el modelo Post como se encuentra en la documentación:

Cada modelo de Eloquent se sincroniza con un “índice” de búsqueda dado, que contiene todos los registros de búsqueda para ese modelo. En otras palabras, se puede pensar en cada índice como una tabla de MySQL. Por defecto, cada modelo puede ser persistido por un índice con el nombre de la tabla que por lo general, es la forma plural del nombre del modelo. Sin embargo, usted es libre de personalizar el índice del modelo reemplazando el método searchableAs en el modelo:

Para definir las propiedades que pueden ser buscadas se utiliza el método toSearchableArray()  que por defecto es toArray().

 

Una vez que hemos hecho esto, puede ver los indices en el dashboard de Algolia; Al agregar, actualizar o eliminar registros, verá su actualización del índice Algolia.

Indexación

Si vas a instalar Scout en un proyecto existente, puede ser que tenga ya los registros de Base de Datos los cuales necesita importar para la búsqueda de Scout. El paquete nos proporciona un comando de artisan que puede usarse para importar todos los registros existentes en los índices de búsqueda.

 

Añadiendo Registros

Cuando se agrega el trait de Scout al modelo, como se explico anteriormente, todo lo que necesita es guardar una instancia del modelo y automáticamente se añade al índice de busqueda. Si por otro lago configuras Scout en las queues esta operación se realizara en segundo plano.

Queueing

Aunque no es necesario, debes considerar la posibilidad de configurar un queues antes de usar Scout. Esto permite hacer una cola de trabajo para todas las operaciones de sincronización de los índices de búsquedas de tu modelo, proporcionando unos mejores tiempos de respuesta dentro de la aplicación.

Para hacer esto , luego de que se haya configurado el queues driver, debes cambiar el valor por defecto de queue dentro de config/scout.php

De esta manera los registros de la base de datos recibirán las actualizaciones de manera inmediata, y los cambios a los índices de búsquedas se pondrán en cola y serán actualizadas tan rápido como el driver de queues lo permita.

Con casi ningún tipo de trabajo, podrás tener rápido y sin mucho trabajo un driver de fulltext search ejecutado dentro de tus Modelos de Eloquent.

Conclusión

Espero que haya sido de tu agrado este post presentando una de las maravillas de Laravel 5.3, esto para seguir con mi lucha diaria de demostrar el falso pensamiento que tienen aún algunos programadores que dice que Laravel 5.3 no es una versión estable, el hecho de que no sea LTS no quiere decir que no pueda utilizarse para tus proyectos o que no sea estable, puedes hacer exactamente lo mismo que en las versiones anteriores, sumados a muchas nuevas características.

Es mas pudiera apostar, que los paquetes externos importantes de Laravel siempre brindan mayor soporte en las ultimas versiones de Laravel, como es el caso de los de Spatie, donde uno de los desarrolladores principales (creador de mas de 60 paquetes) en una de sus entrevista recomendaba siempre utilizar las ultimas versiones de Laravel para así aprovechar las nuevas características y poder estar al día de los posibles cambios, además de que esto motiva a los grupos de desarrollo pro-activos.

En conclusión, todos estamos para aprender, así que si tienes alguna duda, sugerencia o recomendación puedes hacerla a través de los comentarios, o unirte a nuestro Slack. Cabe destacar que aun no he explorado este paquete en su totalidad y aun hay muchas cosas que no he podido probar, así que estoy bastante receptivo a nuevos ejemplos, nuevos drivers, etc.

Luego de este articulo, publicare un tutorial con un ejemplo práctico para que puedas ver mejor como funciona todo si con este articulo aun no te ha quedado claro, nos vemos.

Comparte este artículo

Entra en la discusión y deja tu comentario