Un buscador de texto es una funcionalidad importante para cualquier sistema. Generalmente los datos están almacenados en tablas de base de datos, por ello veamos cuales son las formas de hacer un buscador de texto.
Tipos de Búsqueda en MySQL
Existen dos opciones para realizar búsquedas de texto en MySQL:
- Búsquedas básicas: usando
LIKE
se pueden buscar palabras o frases dentro de un texto. - Búsquedas avanzadas: usando índices
FULLTEXT
que permite buscar frases por proximidad y porcentaje de coincidencia.
Requisitos previos
Para este artículo vamos a crear tabla llamada articles
con los campos title
y content
:
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT
);
Búsquedas básicas
El operador LIKE
permite buscar coincidencias parciales en cadenas de texto, además se usa el caracter comodín %
que representa cualquier caracter.
Si queremos buscar MySQL
en el contenido la consulta sería:
SELECT * FROM articles WHERE content LIKE 'MySQL%'; -- Busca textos que empiecen con MySQL
SELECT * FROM articles WHERE content LIKE '%MySQL%'; -- Busca textos que contengan MySQL
SELECT * FROM articles WHERE content LIKE '%mysql%'; -- Busca texto que contengan MySQL
Si queremos buscar MySQL
tanto en el título y el contenido la consulta sería:
SELECT * FROM articles WHERE title LIKE '%mysql%' OR content LIKE '%mysql%';
Desventajas
Las búsquedas con LIKE
son lentas por que se tiene que recorrer todos los registros para encontrar las coincidencias, además para búsquedas complejas este tipo de búsqueda no funciona correctamente.
Por ejemplo: si buscamos pdo mysql
no devuelve resultados por que estas dos palabras no están en el mismo orden en la tabla.
SELECT * FROM articles WHERE title LIKE '%pdo mysql%' OR content LIKE '%pdo mysql%';
Búsqueda Avanzada
Para hacer búsqueda avanzada se puede usar el índice del tipo FULLTEXT
el cual puede indexar varias columnas de texto y permite hacer la búsqueda por niveles de coincidencia, esto permite buscar varias palabras o frases de forma efectiva.
Creando un índice FULLTEXT
Para mejorar las búsquedas, añade un índice del tipo FULLTEXT
donde se definen que columnas serán parte de este índice:
ALTER TABLE articles ADD FULLTEXT (title, content);
Búsqueda usando FULLTEXT
Para la búsqueda avanzada se utiliza los operadores MATCH
y AGAINST
, donde:
MATCH
: Define los campos a buscar.AGAINST
: Especifica el término o frase a buscar.
Para nuestra tabla la búsqueda sería:
SELECT * FROM articles WHERE MATCH(title, content) AGAINST ('mysql');
Para la búsqueda de dos palabras la búsqueda podemos usar la misma sintaxis, devolverá primero los registros que contengan las dos palabras y luego los registros que tengan sólo una de las palabras:
SELECT * FROM articles WHERE MATCH(title, content) AGAINST ('pdo mysql');
Se puede usar un modo de búsqueda booleano, lo que permite usar operadores +
para palabras requeridas y -
para excluir palabras de los resultados:
SELECT * FROM articles WHERE MATCH(title, content) AGAINST ('pdo mysql -índices' IN BOOLEAN MODE);
Consideraciones
- Los índices
FULLTEXT
ignoran palabras comunes (stopwords) y palabras de menos de 3 caracteres para evitar resultados irrelevantes. - Si el término buscado se encuentra en mas del 50% de los resultados entonces el termino se considera irrelevante y no se devuelve en los resultados.
- Los resultados se ordenan teniendo en cuenta la frecuencia del término en el documento y la frecuencia en todos los documentos.
Conclusión
Implementar un buscador de texto en MySQL es sencillo, puedes usar búsqueda con LIKE
, pero si tienes gran cantidad de registros se recomienda usar los índices FULLTEXT
lo que permite acelerar la búsqueda y permite realizar búsquedas complejas de manera efectiva.
Envíar Comentario
En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas
<pre></pre>