FULLTEXT EN MYSQL: BÚSQUEDAS DE TEXTO Y CÓMO UTILIZARLAS

Cuando realizamos búsquedas de textos o coincidencias de palabras en una base de datos generalmente utilizamos la sentencia WHERE LIKE. Sin embargo, cuando tenemos cientos o miles de datos, el tiempo requerido para encontrar los resultados de la búsqueda es mayor; por esta razón se creó los índices FULLTEXT en mysql, el cual permite optimizar la búsqueda de palabras en un texto mejorando los tiempos de ejecución en consultas sql.

¿Qué es FULLTEXT?

El índice FULLTEXT de MySQL que permite realizar búsquedas de texto optimizadas en columnas indexadas de tipo texto que proporciona una forma eficiente de buscar palabras o textos en grandes como artículos, descripciones de productos o contenido de blogs. Este tipo de índice se aplica a columnas de tipo char, varchar y text. El índice FULLTEXT en MySql, al igual que los demás índices, se puede añadir al momento de crear o de actualizar las tablas. Se puede agregar un índice FULLTEXT a una o varias columnas de tipo texto en una tabla que deseas buscar. Se utilizan en sentencias de "create" y "update".
Creación de un índice fulltext:
La sentencia sería "ALTER TABLE nombre_tabla ADD FULLTEXT(campo1,campo2,....,campo N);", El indice FULLTEXT puede estar compuesto por solo un campo, hasta N campos, siempre que los campos sean de tipo char, varchar o text.

//En el siguiente ejemplo las búsquedas solo se podrán hacer sobre los campos "titulo,entradilla,articulo", si se usa un campo que no esté dentro del índice dará error.
ALTER TABLE articulo ADD FULLTEXT(titulo,entradilla,articulo);
//otra manera de crear el indice fulltext, dentro de la tabla donde "idx_busqueda" es el nombre del índice
CREATE FULLTEXT INDEX idx_busqueda ON (titulo,entradilla,articulo);
//Crear el indice cuando se crea la tabla
CREATE TABLE articulos (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255),
contenido TEXT,
FULLTEXT (contenido)
);
Una vez creado el índice FULLTEXT habrá que hacer búsquedas sobre campos que componen dicho índice. Y esas búsquedas se realizando la función MATCH AGAINST, Hay que recalcar que esta función se tiene que usar sobre los campos que conforman el índice FULLTEXT, sino habrá un error. Esta función permite la búsqueda a través de varias palabras que coincidan con el texto de la columna.
Ejemplo de búsqueda:

//Busca dentro de la tabla articulos los articulos que tengan en los campo "titulo" y "descripcion" la palabra "tecnología"
SELECT titulo, slug
FROM articulos
WHERE MATCH(titulo,descripcion) AGAINST('tecnología');

Modos de búsqueda

La función MATCH AGAINST tiene tres modos de búsqueda:
  • IN NATURAL LANGUAGE MODE: Búsqueda en lenguaje natural (predeterminado). Este modo permite buscar coincidencias basadas en lenguaje natural, es decir, interpreta la consulta como una búsqueda de texto libre, asignando relevancia a los resultados según la coincidencia de palabras.

    SELECT titulo, slug FROM articulos
    WHERE MATCH(contenido) AGAINST('inteligencia artificial' IN NATURAL LANGUAGE MODE);
    
  • IN BOOLEAN MODE: Búsqueda booleana, permite operadores como +, -, *. Para controlar la lógica de búsqueda.

    SELECT titulo, slug FROM articulos
    WHERE MATCH(descripcion) AGAINST('+programación -JavaScript' IN BOOLEAN MODE);
    
  • WITH QUERY EXPANSION: Esta opción amplía la búsqueda al incluir palabras relacionadas semánticamente con los términos de la consulta, basándose en la coincidencia de palabras en el índice. Esto puede ser útil para encontrar resultados más amplios, pero menos precisos.

    SELECT titulo, slug FROM articulos
    WHERE MATCH(contenido) AGAINST('php' WITH QUERY EXPANSION);