Hola, somos Arume

Desarrollamos páginas web, aplicaciones para móviles, capas de realidad aumentada y aplicaciones para Facebook. Nos apasiona la informática y somos unos perfeccionistas incurables; por eso en nuestros proyectos utilizamos estándares.

tel. 625 519 694

Mendaña de Neyra, 34, 3º B, 15008, A Coruña

Autenticarse

Registrarse. ¿Has olvidado tu contraseña?

Etiquetas

Saltar las etiquetas

Suscríbete a las RSS

Estás en:

  • Inicio >
  • Blog >
  • MySQL: búsqueda de textos en bases de datos

MySQL: búsqueda de textos en bases de datos

08 Feb 2011 por Jose

Comentarios: 13

MySQL

Habitualmente en las páginas web necesitamos realizar búsquedas en los textos, ya sea en artículos, noticias o cualquier sección de nuestra web. Cuando esta búsqueda es sobre una base de datos, la primera idea que nos surge es la del operador LIKE de SQL. Pero esta búsqueda tiene un rendimiento bastante malo, puesto que necesita realizar la búsqueda en todas las filas de la tabla encontrando coincidencias en todas las subcadenas de los campos seleccionados.

También tiene otros inconvenientes como que no podemos ordenar los resultados por número de apariciones o lo engorroso que resultan las búsquedas cuando son de varios términos sobre múltiples columnas.

SELECT name FROM table_example WHERE name LIKE "%search%" OR description LIKE "%search%";

Índices FULLTEXT

Para realizar búsquedas de texto sobre tablas MySQL existe un tipo de índice especial llamado FULLTEXT. Sobre éste indicaremos las columnas de búsqueda y él irá indexando todas las palabras incluidas pudiendo realizar así búsquedas de forma rápida. El índice sólo es válido para tablas MyISAM y los campos deben ser de tipo CHAR, VARCHAR o TEXT.

La forma de crear y usar el índice es:

ALTER TABLE table_example ADD FULLTEXT(name, description);
SELECT name, description FROM table_example WHERE MATCH(name, description) AGAINST ("search")

Los resultados, por defecto, están ordenados por relevancia, las palabras de menos de 4 letras quedan excluidas de la búsqueda y si los términos de búsqueda están presentes en más del 50% de los resultados éstos no se mostrarán.

Búsquedas IN BOOLEAN MODE

El ejemplo anterior hace referencia a las búsquedas naturales, pero existe además un modificador que nos permite utilizar operadores en las mismas, al estilo "Google": IN BOOLEAN MODE.

Algunas de las características de las búsquedas FULLTEXT no se aplican en este tipo de consultas, como son la ordenación por relevancia o el límite del 50%.

SELECT name, description FROM table_example WHERE MATCH(name, description) AGAINST ("+search -banned" IN BOOLEAN MODE)

Algunos de los operadores que podemos aplicar en las búsquedas booleanas son:

  • El signo + indica que la palabra debe estar presente en cada resultado.
  • El signo - indica que la palabra no debe estar presente en ningún resultado.
  • El signo ~ indica que la palabra perderá peso en la relevancia de los resultados.
  • El asterisco * sirve para buscar las palabras que comiencen por el término de búsqueda.
  • Las comillas "" devolverán las coincidencias exactas con el texto que contienen.

Aunque estos índices resulten más eficientes para grandes volúmenes de datos, siempre deberemos analizar los requerimientos de nuestras búsquedas para determinar que es lo que más se ajuste a nuestras necesidades.

Más información

Manual de MySQL: Funciones de búsqueda de texto completo

Comentarios

13 comentarios. Comentar.

1. Arapo el 10 Ene 2012 a las 04:08:42

Me gusta vuestro estilo... Buen post. Gracias.

2. Anónimo el 06 Feb 2013 a las 19:33:32

Gracias por la información...estaba buscando lo de los operadores...

3. Juan el 28 Jul 2013 a las 10:26:57

despues de muchos tiempo haciendo buscadores con LIKE desgolsando frases me encuentro que existe esto. O.o jajjaja Muuuuchas gracias compi!

4. Javier el 22 Mar 2014 a las 02:05:32

Muchas gracias por tu aporte...

A mi me apoyo porque en donde trabajo hay bases de datos que los nombres inician con apellidos y en otras viceversa.

5. Daniel el 16 Ene 2015 a las 18:27:55

Excelente !. gracias.

6. Sergio_Between el 07 May 2015 a las 18:36:37

REALMENTE ES UN GRAN AVANCE PARA HACER FUNCIONES DE BUSQUEDAS EN BASE DE DATOS. O SEA, QUE LIKE %TAL% AND LIKE %TAL% AND ... ES ALGO COMPLEJO, POR SU PUESTO, PROBRE LIKE, LO LLENÁBAMOS DE TRABAJO Y EL POBRECILLO NI CULPA TIENE DE QUE NOSOTROS NO SEPAMOS.

7. Anónimo el 10 Jul 2015 a las 12:08:26

no te comprendo

8. anonimo el 07 Sep 2015 a las 18:17:37

facil de entender gracias

9. yolo el 11 Mar 2016 a las 21:00:06

Bueno

10. nan_do9@yahoo.com el 15 Nov 2016 a las 21:48:02

tengo la versión de mysql 5.5.52 pero no me funciona

11. hackmon el 02 Dic 2016 a las 17:07:46

Simplemente wow, mis LIKE hacían 40 segundo, ahora mi búsqueda hace 0.04 segundos

12. QuePasaLongiqloijoelatragasable el 11 Abr 2017 a las 16:33:45

Nice

14. Marcos el 02 Oct 2017 a las 09:18:08

Esto es excelente

Comentar

Comentar de forma anónima

Puedes comentar poniendo cualquier nombre o apodo, exceptuando los nombres de usuarios registrados. Máximo de 50 caracteres.

Comentar como usuario registrado

Registrarse. ¿Has olvidado tu contraseña?