PHP y MySQL para gentes de letras - Anexo I: Buscador potente con MySql

16 - Anexo I: Buscador potente con MySql

[editar]
Curso gratis creado por Coder. Extraido de: http://www.tomatoma.ws/subsecciones.php?forum_id=27&catid=22&todos=1
08 de Marzo de 2006

Hace tiempo estaba trabajando en una web con una base de datos y me propuse hacer un buscador muy potente, y buscando por la red encontré un sistema de búsqueda muy bueno: el "MATCH AGAINST"
A continuación os explico para quien no lo conozca cómo funciona. Consigue resultados similares a los buscadores profesionales, como Google. Eso sí, requiere una experiencia mínima con php y MySql.

------------------------------------------------------
Partimos suponiendo que tenemos una tabla llamada noticias con los campos titulo (Varchar) y cuerpo (text).

Pues bien, lo primero que hacemos es crear un índice de tipo

Fulltext.

Par hacerlo basta con introducir la sentencia

ALTER TABLE noticias ADD FULLTEXT(titulo, cuerpo);
Si tenemos PhpMyAdmin basta con ir a la tabla deseada y abajo a la izquierda de la pantalla estan definidos los índices. Pulsa en Crear un índice en 2 columnas Continúe
Después ponéis nombre al índice (buscar, por ejmplo), seleccionais tipo de indice:FULLTEXT y seleccionáis los campos titulo y cuerpo, pulsa a grabar y ya está.



A continuación introducimos en nuestro documento php el código necesario para realizar la búsqueda:

Código:

SELECT  * , MATCH (`titulo`,`cuerpo`) AGAINST ('$busqueda') AS puntuacion
  FROM noticias WHERE  MATCH (`titulo`,`cuerpo`) AGAINST ('$busqueda')
  ORDER  BY puntuacion DESC LIMIT 50


Traduciendo: Selecciona todos los campos cuya fila coincida en título o cuerpo con la variable $busqueda, y ordena por puntuación en orden descendiente. Muestra solo los 50 resultados.

Puntuacion es un valor que asigna interiormente la base de datos a cada resultado, cuanta más similitud con $busqueda tenga el resultado más puntuación tiene (valor decimal de 0 a 1). Aquí reside lo especial de este sistema: muestra las coincidencias literales y las similares en orden de similitud.

Así si has escrito por ejemplo "Reproductor Sony" en el buscador, aparecería primero uno que podría llamarse "El nuevo reproductor sony" y a continuación uno llamado "Cómo usar un reproductor de Mp3", etc

Pero hay que tene en cuenta que para búsquedas de una sola palabra es más eficaz el trdicional LIKE.

Así podríamos sugerir el siguiente archivo de búsqueda:

Código:

<?php
//cadena de conexion
mysql_connect("host","usuario","password");
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
  //CUENTA EL NUMERO DE PALABRAS
  $trozos=explode(" ",$busqueda);
  $numero=count($trozos);
  if ($numero==1) {
    //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
    $cadbusca="SELECT  * FROM noticias WHERE titulo LIKE  '%$busqueda%' OR cuerpo LIKE  '%$busqueda%' LIMIT 50";
  } elseif ($numero>1) {
    //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
    //busqueda de frases con mas de una palabra y un algoritmo especializado
    $cadbusca="SELECT  * , MATCH (`titulo`,`cuerpo`) AGAINST ('$busqueda') AS puntuacion
  FROM noticias WHERE  MATCH (`titulo`,`cuerpo`) AGAINST ('$busqueda')
  ORDER  BY puntuacion DESC LIMIT 50";
  }
  $result=mysql("teleformacion", $cadbusca);
  While($row=mysql_fetch_object($result))
  {
    //Mostramos los titulos de los articulos o lo que deseemos...
    $cuerpo=$row->cuerpo;
    $titulo=$row->titulo;
    echo $cuerpo." - ".$titulo."<br>";
  }
}
?>


Ojalá os sirva de mucho! ;-)

Espero comentarios!!

__________________________________ Referencias:
>>
http://www.programacion.com/php/articulo/adr_buscador/
>> http://www.fabio.com.ar/verpost.php?id_noticia=959


 

[editar]

26 opiniones

dsdas

dsdsd
ui

io
iui

iui
Opinion

Esto está... Ufff, quedé sin palabras, está más que excelente. Aprecio estos conocimientos, grácias.
exelentisimo

dure dos semanas buscando un tutorial y este es el mas detallado y que he visto.
gracias por tus aporte felicitacione
1 2 3 4 5 6 | siguiente >

Cursos gratis relacionados con 'PHP y MySQL para gentes de letras'

Si nunca se te ha pasado por la imaginación que podrías llegar a programar, con... Más »

Autor y licencia de 'PHP y MySQL para gentes de letras'

Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.