La búsqueda de texto completo (Fulltext) permite encontrar palabras y frases de forma mucho más precisa y eficiente que un simple LIKE. En el contexto de Laravel, esta funcionalidad es especialmente valiosa en proyectos con grandes volúmenes de texto, como blogs, foros o catálogos.
A partir de la versión 8.79.0 de Laravel, contamos con soporte nativo para índices Fulltext en MySQL y PostgreSQL gracias a la PR #40129. Esto facilita escribir consultas más claras y potentes para filtrar contenido. En este artículo te mostraré:
Cómo configurar tu migración para manejar índices Fulltext.
Cómo insertar registros de prueba.
Cómo realizar búsquedas con
whereFullText.Algunas buenas prácticas para sacarle el máximo provecho.
1. Requisitos y compatibilidad
¿Desde qué versión de Laravel?
A partir de Laravel v8.79.0 se incluyó la nueva funcionalidad de búsqueda Fulltext de forma nativa.
¿Para qué motores de base de datos?
MySQL: Soportado en versiones 5.6+ si la tabla está en InnoDB o MyISAM y se han creado índices FULLTEXT.
PostgreSQL: También se introdujo soporte para TSVector y TSQuery nativos en PostgreSQL, lo cual habilita funciones similares de texto completo (aunque la sintaxis interna sea diferente a la de MySQL).
Si utilizas versiones anteriores a Laravel 8.79.0, podrías implementar la búsqueda Fulltext mediante sentencias crudas (
whereRawconMATCH ... AGAINSTen MySQL o funciones específicas de PostgreSQL), pero no dispondrás del métodowhereFullTextde forma nativa.
2. Creando la tabla con índices Fulltext
Primero, necesitaremos una tabla con un índice Fulltext. Este ejemplo crea una tabla articles con campos title y body, y define su índice:
Si usas PostgreSQL
En vez de
fullText(), podrías necesitar ajustes específicos (p.ej.to_tsvector('spanish', title || ' ' || body)) para aprovechar al máximo la búsqueda. Sin embargo, Laravel v8.79.0+ incorpora soporte parawhereFullTextcon PostgreSQL también, realizando las conversiones necesarias internamente.
Importante: Asegúrate de que tu versión de MySQL o PostgreSQL sea compatible con índices Fulltext, y revisa la configuración de tu motor de almacenamiento si usas MySQL.
3. Insertando datos de ejemplo
Para poner a prueba el índice, insertamos algunos registros:
Podrías hacerlo directamente desde Eloquent, con Article::create(...), o desde un seeder para mantener tu código más organizado.
4. Realizar búsquedas con whereFullText
Con Laravel 8.79.0 o posterior, ya contamos con el método whereFullText, que internamente traduce a MATCH ... AGAINST (para MySQL) o to_tsquery / plainto_tsquery (en PostgreSQL).
Si la palabra “Laravel” aparece en title o body, esos registros se devolverán. Por ejemplo, si uno de los artículos incluye la frase “Tutorial para aprender Laravel de forma completa desde cero”, se mostrará en los resultados.
Agregando relevancia y orden
En MySQL, si deseas puntuar (rankear) los resultados según su relevancia, puedes usar MATCH (columnas) AGAINST (texto) AS score y luego ordenar por score:
En PostgreSQL, la lógica de relevancia se maneja con ts_rank o ts_rank_cd. Laravel no lo provee directamente, pero puedes usar selectRaw y whereRaw para emular este comportamiento:
5. Ventajas del Fulltext en lugar de LIKE
Rendimiento: Al usar índices, las búsquedas escalan mejor con grandes volúmenes de datos.
Relevancia: Fulltext clasifica los resultados en función de la cantidad de coincidencias, mientras que LIKE no.
Búsquedas complejas: Puedes buscar frases exactas, palabras obligatorias (
+) o prohibidas (-) en MySQL (modo boolean), o aprovechar la potencia de PostgreSQL conto_tsquery.Facilidad en Laravel 8.79.0+: Con
whereFullTextno necesitas escribir sentencias crudas — simplifica la legibilidad y el mantenimiento.
6. Buenas prácticas y consejos
Verifica versiones: Usa Laravel 8.79.0+ para contar con
whereFullTextnativo en MySQL y PostgreSQL.Define correctamente tus índices: Si tu tabla tiene gran cantidad de datos, crear un índice Fulltext puede ser costoso; planifica la migración para momentos de menor tráfico.
Optimiza y limpia tu contenido: Un índice Fulltext no hace magia por sí solo; si tu contenido está lleno de palabras irrelevantes, la búsqueda no será óptima.
Combina con otras condiciones: Puedes anidar
whereFullTextcon otros métodos de Eloquent o Query Builder:Personaliza el idioma (en PostgreSQL): Usa
to_tsvector('spanish', ...)yplainto_tsquery('spanish', '...')para tener un mejor stemming (forma base de palabras).Explora la relevancia: En MySQL, el modo
IN BOOLEAN MODEte permite búsquedas tipo+php -rust. En PostgreSQL,@@conts_rank_cdte deja ordenar por relevancia lingüística.
7. Conclusión
Gracias a la versión 8.79.0 de Laravel, ahora disponemos de soporte nativo para realizar búsquedas Fulltext en MySQL y PostgreSQL sin tener que recurrir a sentencias crudas en la mayoría de los casos. Esto hace que crear un buscador de calidad sea más sencillo, eficiente y ordenado dentro de tu aplicación.
Si deseas un motor de búsqueda avanzado para tu sitio (especialmente si es un blog o catálogo de productos), Fulltext es una excelente opción para brindar resultados más relevantes y mejorar la experiencia del usuario.
Recursos adicionales
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción