Ola, somos Arume

Desenvolvemos páxinas web, aplicacións para móbiles, capas de realidade aumentada e aplicacións para Facebook. Apaixónanos a informática e somos uns perfeccionistas incurables; por eso nos nosos proxectos utilizamos estándares.

tel. 625 519 694

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

Autenticarse

Rexistrarse. Esqueceches o teu contrasinal?

Etiquetas

Saltar as etiquetas

Subscríbete ás 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 nas páxinas web necesitamos realizar búsquedas nos textos, xa sexa en artigos, noticias ou calquera sección da nosa web. Cando esta búsqueda é sobre unha base de datos, a primeira idea que nos xorde é a do operador LIKE de SQL. Pero esta búsqueda ten un rendemento bastante malo, posto que necesita realizar a procura en todas as filas da táboa atopando coincidencias en todas as subcadeas dos campos seleccionados.

Tamén ten outros inconvenientes como que non podemos ordenar os resultados por número de aparicións ou o laboriosas que resultan as búsquedas cando son de varios termos 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 táboas MySQL existe un tipo de índice especial chamado FULLTEXT. Sobre este indicaremos as columnas de búsqueda e el irá indexando todas as palabras incluídas podendo realizar así procuras de forma rápida. O índice só é válido para táboas MyISAM e os campos deben ser de tipo CHAR, VARCHAR ou TEXT.

A forma de crear e usar o índice é:

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

Os resultados, por defecto, están ordenados por relevancia, as palabras de menos de 4 letras quedan excluídas da procura e se os termos de búsqueda están presentes en máis do 50% dos resultados estes non se mostrarán.

Búsquedas IN BOOLEAN MODE

O exemplo anterior fai referencia ás búsquedas naturais, pero existe ademais un modificador que nos permite utilizar operadores nas mesmas, ó estilo "Google": IN BOOLEAN MODE.

Algunhas das características das búsquedas FULLTEXT non se aplican neste tipo de consultas, como son a ordenación por relevancia ou o límite do 50%.

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

Algúns dos operadores que podemos aplicar nas búsquedas booleanas son:

  • O signo + indica que a palabra debe estar presente en cada resultado.
  • O signo - indica que a palabra non debe estar presente en ningún resultado.
  • O signo ~ indica que a palabra perderá peso na relevancia dos resultados.
  • O asterisco * serve para buscar as palabras que comecen polo termo de búsqueda.
  • As comiñas "" devolverán as coincidencias exactas co texto que conteñen.

Aínda que estes índices resulten máis eficientes para grandes volumes de datos, sempre deberemos analizar os requirimentos das nosas búsquedas para determinar que é o que máis se axuste ás nosas necesidades.

Máis información

Manual de MySQL: Funcións de búsqueda de texto completo

Comentarios

13 comentarios. Comentar.

1. Arapo o 10 Xan 2012 ás 04:08:42

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

2. Anónimo o 06 Feb 2013 ás 19:33:32

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

3. Juan o 28 Xul 2013 ás 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 o 22 Mar 2014 ás 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 o 16 Xan 2015 ás 18:27:55

Excelente !. gracias.

6. Sergio_Between o 07 Mai 2015 ás 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 o 10 Xul 2015 ás 12:08:26

no te comprendo

8. anonimo o 07 Set 2015 ás 18:17:37

facil de entender gracias

9. yolo o 11 Mar 2016 ás 21:00:06

Bueno

10. nan_do9@yahoo.com o 15 Nov 2016 ás 21:48:02

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

11. hackmon o 02 Dec 2016 ás 17:07:46

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

12. QuePasaLongiqloijoelatragasable o 11 Abr 2017 ás 16:33:45

Nice

14. Marcos o 02 Out 2017 ás 09:18:08

Esto es excelente

Comentar

Comentar de forma anónima

Podes comentar poñendo calquera nome ou alcume, exceptuando os nomes de usuarios rexistrados. Máximo de 50 caracteres.

Comentar como usuario rexistrado

Rexistrarse. Esqueceches o teu contrasinal?