Saltar al contenido

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é:

  1. Cómo configurar tu migración para manejar índices Fulltext.

  2. Cómo insertar registros de prueba.

  3. Cómo realizar búsquedas con whereFullText.

  4. 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 (whereRaw con MATCH ... AGAINST en MySQL o funciones específicas de PostgreSQL), pero no dispondrás del método whereFullText de 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 para whereFullText con 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

  1. Rendimiento: Al usar índices, las búsquedas escalan mejor con grandes volúmenes de datos.

  2. Relevancia: Fulltext clasifica los resultados en función de la cantidad de coincidencias, mientras que LIKE no.

  3. Búsquedas complejas: Puedes buscar frases exactas, palabras obligatorias (+) o prohibidas (-) en MySQL (modo boolean), o aprovechar la potencia de PostgreSQL con to_tsquery.

  4. Facilidad en Laravel 8.79.0+: Con whereFullText no necesitas escribir sentencias crudas — simplifica la legibilidad y el mantenimiento.


6. Buenas prácticas y consejos

  1. Verifica versiones: Usa Laravel 8.79.0+ para contar con whereFullText nativo en MySQL y PostgreSQL.

  2. 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.

  3. 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.

  4. Combina con otras condiciones: Puedes anidar whereFullText con otros métodos de Eloquent o Query Builder:

  5. Personaliza el idioma (en PostgreSQL): Usa to_tsvector('spanish', ...) y plainto_tsquery('spanish', '...') para tener un mejor stemming (forma base de palabras).

  6. Explora la relevancia: En MySQL, el modo IN BOOLEAN MODE te permite búsquedas tipo +php -rust. En PostgreSQL, @@ con ts_rank_cd te 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

school Curso completo

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.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje