Cómo crear un buscador de Texto con MySQL

22/11/2024 | MySQL | 0 comentarios

Crea un buscador de texto en MySQL con LIKE e índices de texto completo. Optimiza consultas y mejora la relevancia fácilmente.

Descargar archivos


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.

Referencias

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>