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