El Full-Text Search (búsqueda de texto completo) en MySQL es una funcionalidad que permite realizar búsquedas avanzadas y rápidas dentro de columnas de texto. Es útil para construir sistemas de búsqueda como los que se utilizan en blogs, sitios de noticias y aplicaciones con grandes volúmenes de texto.
El Full-Text Search de MySQL permite buscar palabras o frases dentro de columnas de texto mediante índices especiales llamados índices FULLTEXT. Esto mejora significativamente el rendimiento de las consultas en comparación con búsquedas convencionales con operadores como LIKE.
CHAR, VARCHAR o TEXT.
Antes de realizar una búsqueda de texto, es necesario crear un índice FULLTEXT en las columnas que deseas buscar.
Supongamos que tienes una tabla articulos:
CREATE TABLE articulos (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255),
contenido TEXT
);
Para habilitar la búsqueda, agrega un índice FULLTEXT:
ALTER TABLE articulos ADD FULLTEXT (titulo, contenido);
La búsqueda se realiza usando la función MATCH(columnas) AGAINST('consulta').
Buscar artículos que contengan la palabra "MySQL":
SELECT *
FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('MySQL');
MySQL admite varios modos de búsqueda de texto:
| Modo | Descripción |
|---|---|
IN NATURAL LANGUAGE MODE
|
Realiza una búsqueda en lenguaje natural (por defecto). |
IN BOOLEAN MODE
|
Permite usar operadores booleanos como +, -, , etc., para búsquedas más específicas.
|
WITH QUERY EXPANSION
|
Amplía los términos de búsqueda para incluir palabras relacionadas. |
Buscar artículos que contengan "MySQL" pero no "PostgreSQL":
SELECT *
FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('+MySQL -PostgreSQL' IN BOOLEAN MODE);
La función MATCH...AGAINST devuelve una puntuación de relevancia. Puedes usarla para ordenar los resultados:
SELECT *, MATCH(titulo, contenido) AGAINST('MySQL') AS relevancia
FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('MySQL')
ORDER BY relevancia DESC;
1. Rendimiento mejorado: Es mucho más rápido que usar LIKE en búsquedas de texto.
2. Búsquedas complejas: Admite operadores como +, -, y comodines (*).
3. Relevancia: Proporciona un sistema integrado para ordenar resultados según su importancia.
1. Tamaño mínimo de las palabras: Por defecto, MySQL ignora palabras con menos de 4 caracteres. Esto se puede ajustar configurando el parámetro ft_min_word_len.
2. Palabras comunes: Palabras frecuentes como "the" o "and" pueden ser ignoradas por el índice FULLTEXT.
3. Soporte para múltiples idiomas: Para realizar búsquedas en otros idiomas, debes configurar diccionarios específicos o ajustar el "stopword list".
4. No es case-sensitive: La búsqueda no distingue entre mayúsculas y minúsculas.
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255),
descripcion TEXT
);
INSERT INTO productos (nombre, descripcion) VALUES
('Laptop', 'Una computadora portátil con 16GB de RAM y SSD'),
('Teléfono', 'Un teléfono inteligente con cámara de alta resolución'),
('Tablet', 'Un dispositivo ideal para leer y navegar en la web');
ALTER TABLE productos ADD FULLTEXT(nombre, descripcion);
1. Buscar productos que contengan la palabra "portátil":
SELECT *
FROM productos
WHERE MATCH(nombre, descripcion) AGAINST('portátil');
2. Ordenar por relevancia:
SELECT *, MATCH(nombre, descripcion) AGAINST('teléfono') AS relevancia
FROM productos
WHERE MATCH(nombre, descripcion) AGAINST('teléfono')
ORDER BY relevancia DESC;
Consulta la documentación oficial de MySQL sobre Full-Text Search para más información y casos avanzados.
Jorge García
Fullstack developer