06Mar 2010 2 Comments */?>

Buscador por Relevancia con mysql para tu web

Categorías: MySQL, Recursos - Tags:

Ando perdido últimamente, y practicamente no actualizo el blog. Eso es debido a que estoy inmerso en un Proyecto grande, con lanzamiento en varios paises al mismo tiempo y ocupo TODO mi tiempo libre y el que no tengo también en el. Pronto (espero) le voy a decir de que se trata.

Volviendo al tema original del post, les voy a enseñar como hacer un buscador por relevancia con mysql.
La forma tradicional que usamos al buscar con mysql es con el comando LIKE

SELECT * FROM anuncios WHERE titulo LIKE '%perro%' OR descripcion LIKE '%perro%'

Esto nos devuelve todos los anuncios que en el titulo o en la descripcion aparezca la palabra ‘perro’ o ‘caraperro’ o cualquier otra que contenga ‘perro’.
Estos resultado podriamos ordenarlos por ejemplo por la fecha de publicación, por el titulo, etc.

Pero que pasa cuando queremos ordenarlo por RELEVANCIA, osea queremos que el anuncio que hable más de perros aparesca primero y asi consecutivamente. Aqui es donde entra en juego la funcion de mysql FULL-TEXT .

Lo primero que tenemos que hacer antes de hacer un query en convertir nuestros campos en full-text .Para ello simplemente hacemos:

ALTER TABLE anuncios ADD FULLTEXT(titulo, descripcion);

Una ves echo esto , a la hora de hacer la QUERY vamos a usar las funciona de fulltext search MATCH y AGAINST de la siguiente manera:

SELECT * FROM anuncios WHERE MATCH(titulo, descripcion) AGAINST ('perro')

Esta línea utiliza la función MATCH … AGAINST … que encuentra el texto buscado, usando consultas similares a como lo hacen los motores de búsqueda. Además, se calcula internamente una puntuación en función de como aparecen y la cantidad de términos buscados dentro de nuestro titulo y descripcion.

¿Como perfeccionar la busqueda?

SELECT * , MATCH (titulo,descripcion) AGAINST ('perro') AS puntuacion FROM anuncios WHERE MATCH (titulo, descripcion) AGAINST ('perro') ORDER BY puntuacion DESC LIMIT 50

Esta consulta devolverá las primeras 50 consultas ordenadas por la puntuación. Jugando un poco con CSS pueden lograr mostrar estrellitas o barras de progreso segun la puntuación, pero ese ya es otro tema aparte.

Como todo esto tiene alguna limitación que otra. Por ejemplo no toma en cuenta palabras con menos de 4 caracteres.

De todas formas es la forma mas eficiente y rapida de buscar , sobre todo con múltiples palabras.

Un saludo y espero que les haya servido

Damián Logghe

Programador freelancer y emprendedor en sueños. Contento de ser mi jefe y poder hacer lo que me gusta. WordPress es mi principal fuente de ingreso y me escribo tanto para ayudar como para tener una guia de memoria. Quieres contratarme? Déjame un mensaje.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus

  • ISAAC

    GRACIAS POR EL TIEMPO PARA HACER ESTE ARTICULO

  • Nuno

    Gracias, espero que me sirva para hacer un buscador para mi blog de wordpress.