Académique Documents
Professionnel Documents
Culture Documents
JORGE
GODOY
CAMACHO
Los tipos de los campos a buscar debern ser CHAR, VARCHAR o TEXT con sus
variantes.
Ahora disearemos una pgina con un formulario y una caja de texto para escribir la
cadena de consulta "busqueda" y llamar al script de bsqueda "buscar.php". Ejemplo:
Pues esta consulta nos mostrar todos los artculos que en su ttulo o en su contenido
aparezca la frase de bsqueda tal y como nosotros la introducimos. Esto es muy
limitado ya que un cambio en el orden de las palabras o un artculo de separacin
darn al traste con nuestra bsqueda no mostrando los resultados deseados.
Si bien podramos depurar y mejorar la sintaxis de nuestra bsqueda utilizando el
operador LIKE las bsquedas resultaran muy lentas y no tendran el resultado
esperado.
La solucin ms eficiente es utilizar los ndices FULLTEXT especficamente indicados
para estos menesteres. Pues bien esto implica ir a nuestra base de datos, y crear un
indice FULLTEXT con todos los campos que deseamos incluir en nuestra bsqueda,
que en nuestro caso son TITULO y DESARROLLO. Para ello basta con el phpmyadmin
o bien escribir la instruccin directamente:
ALTER
TABLE
ARTICULOS
ADD
FULLTEXT(TITULO,
DESARROLLO);
Esta lnea utiliza la funcin MATCH ... AGAINST ... que encuentra el texto buscado,
usando consultas en lenguaje natural parecido a como lo hacen los motores de
bsqueda. Adems, se calcula internamente una puntuacin en funcin de cmo
aparecen
los
trminos
buscados
dentro
de
nuestro
artculo.
Perfeccionando la bsqueda:
SELECT * , MATCH (TITULO,DESARROLLO) AGAINST ('$busqueda') AS
puntuacion FROM ARTICULOS WHERE MATCH (TITULO, DESARROLLO) AGAINST
('$busqueda') ORDER BY puntuacion DESC LIMIT 50
interno
de
la
base
de
datos.
<?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 REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND
DESARROLLO LIKE '%$busqueda%' OR TITULO 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 REFERENCIA, TITULO , MATCH ( TITULO, DESARROLLO )
AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE MATCH ( TITULO,
DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacion", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo $referencia." - ".$titulo."<br>";;
}
?>