Foros del Web » Programando para Internet » PHP »

Duda con buscador exacto de frases

Estas en el tema de Duda con buscador exacto de frases en el foro de PHP en Foros del Web. Hola a todos! Quería hacerles una consulta en principio teórica para sacarme una duda aunque sea más que obvia y parezca tonta... Para hacer un ...
  #1 (permalink)  
Antiguo 21/10/2011, 14:59
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Duda con buscador exacto de frases

Hola a todos! Quería hacerles una consulta en principio teórica para sacarme una duda aunque sea más que obvia y parezca tonta...
Para hacer un buscador ya sea de una palabre o de una frase, ¿qué es más recomendable utilizar? ¿LIKE O FULLTEXT?

Les comento xq esto... tengo armado para un sitio un buscador interno que lo implementé gracias a los aportes de los compañeros del foro. Les muestro el código:
Código PHP:
    include('conectar.php');
    
    
$CantxCol 4//Cantidad de columnas
    
$Cant 0// Variable para ser usada como contador


    // conexion a la base
    
$conexion mysql_connect($host_db$usuario_db$pass_db) or die ("no se ha podido conectar a la BD");
    
mysql_select_db($base_db$conexion) or die ("no se ha podido seleccionar la BD");

if(isset(
$_GET['buscar']) && $_GET['buscar'] == '>>'){ 
    
$txt_criterio htmlspecialchars($_GET['txt_criterio']);
   
   
$trozos=explode(" ",$txt_criterio);
   
$numero=count($trozos);


  
$sqlBuscar "SELECT * , MATCH (descripcion,categoria,linea) 
AGAINST ('$txt_criterio' IN BOOLEAN MODE) AS coincidencias FROM producto WHERE MATCH (descripcion,categoria,linea) 
AGAINST ('$txt_criterio' IN BOOLEAN MODE) ORDER BY coincidencias, producto.categoria, producto.cod_linea, producto.cod_articulo" 
or die(mysql_error());

$res mysql_query($sqlBuscar); 
$numeroRegistros mysql_num_rows($res);

//calculo el total de páginas, tamaño de la pagina 
$tamPag=10;
$tamPag2=16;

//pagina actual si no esta definida y limites 
if(!isset($_GET["pagina"])) 

$pagina=1
$inicio=1
$final=$tamPag
}else{ 
$pagina $_GET["pagina"]; 

//calculo del limite inferior 
$limitInf=($pagina-1)*$tamPag

//calculo del numero de paginas 
$numPags=ceil($numeroRegistros/$tamPag); 
if(!isset(
$pagina)) 

$pagina=1
$inicio=1
$final=$tamPag
}else{ 
$seccionActual=intval(($pagina-1)/$tamPag); 
$inicio=($seccionActual*$tamPag)+1

if(
$pagina<$numPags

$final=$inicio+$tamPag-1
}else{ 
$final=$numPags


if (
$final>$numPags){ 
$final=$numPags



  
$sqlBuscar "SELECT * , MATCH (descripcion,categoria,linea) 
AGAINST ('$txt_criterio' IN BOOLEAN MODE) AS coincidencias FROM producto WHERE MATCH (descripcion,categoria,linea) 
AGAINST ('$txt_criterio' IN BOOLEAN MODE) ORDER BY coincidencias, producto.categoria, producto.cod_linea, producto.cod_articulo LIMIT $limitInf, $tamPag2" 
or die(mysql_error());

$res mysql_query($sqlBuscar); 
}
..... 
El tema es que si coloco una frase, por ejemplo; faro grande me trae todos los resultados de faro y de grande por separado y lo que necesitaría es que me traiga los resultados de faro grande, así tal cual y luego los resultados si encuentra por separado.

¿Se puede arreglar mi código para poder hacerlo como lo necesito?

Desde ya muchas gracias nuevamente y saludos.
MArx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 22/10/2011, 13:46
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

¿Alguna sugerencia sobre mi duda?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #3 (permalink)  
Antiguo 22/10/2011, 14:01
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Duda con buscador exacto de frases

Cita:
Iniciado por marx-pola Ver Mensaje
¿Alguna sugerencia sobre mi duda?
Si pones lo que buscas entre comillas dobles (si, como se hace en Google), busca la frase EXACTA. Dile que busque: "faro grande"

http://dev.mysql.com/doc/refman/5.0/...t-boolean.html
  #4 (permalink)  
Antiguo 27/10/2011, 11:11
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

Bueno... ya probé con LIKE y FULLTEXT y no logro que me devuelva palabras de 2 ó 3 letras. Si coloco una palabra de 4 letras me devuelve resultados, pero con menos NO.
Si coloco faros gol me trae solo faros. Si coloco vw, por más que esté cargado en la base no me devuelve nada... directamente me dice que no se encontraron resultados.

Lo que necesitaría es hacer algo para que me encuentre cualquier palabra ó frase, ya sea que tenga 2 letras ó más. ¿Puede ser que me den una mano con esto que me tiene reloco? Encima lo tengo que entregar este fin de semana, me quiero morir.

Gracias y saludos.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #5 (permalink)  
Antiguo 28/10/2011, 04:10
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

Consulta... ¿cómo hago para que el comodín % me quede así en el navegador entre las palabras a buscar? ¿se puede? Sería una solución ya que en el navegador cambié esto:

rpauto-resultb.php?txt_criterio=arranque+gol

por esto:...

rpauto-resultb.php?txt_criterio=arranque%gol

...y funcionó la devolución de resultados.

Gracias.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #6 (permalink)  
Antiguo 28/10/2011, 04:30
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

Lo que hice fue tomar un ejemplo que encontré en el foro y aplicarlo en mi consulta. El ejemplo lo tomé de acá, del foro por supuesto: Ayuda con Buscador...

Código PHP:
// varificamos que el formulario halla sido enviado
if(isset($_GET['buscar']) && $_GET['buscar'] == '>>'){ 

// declarar variables los datos del formulario
$txt_criterio $_GET["txt_criterio"];
$palabrasexplode(" "$txt_criterio);
$buscarimplode("%' OR LIKE '%"$palabras);

$sqlBuscar "SELECT * FROM producto WHERE descripcion LIKE '%".$buscar."%' ORDER BY categoria, cod_linea, cod_articulo" or die(mysql_error());

$res mysql_query($sqlBuscar); 
$numeroRegistros mysql_num_rows($res);

//calculo el total de páginas, tamaño de la pagina 
$tamPag=10;
$tamPag2=16;

//pagina actual si no esta definida y limites 
if(!isset($_GET["pagina"])) 

$pagina=1
$inicio=1
$final=$tamPag
}else{ 
$pagina $_GET["pagina"]; 

//calculo del limite inferior 
$limitInf=($pagina-1)*$tamPag

//calculo del numero de paginas 
$numPags=ceil($numeroRegistros/$tamPag); 
if(!isset(
$pagina)) 

$pagina=1
$inicio=1
$final=$tamPag
}else{ 
$seccionActual=intval(($pagina-1)/$tamPag); 
$inicio=($seccionActual*$tamPag)+1

if(
$pagina<$numPags

$final=$inicio+$tamPag-1
}else{ 
$final=$numPags


if (
$final>$numPags){ 
$final=$numPags



$sqlBuscar "SELECT * FROM producto WHERE descripcion LIKE '%".$buscar."%' ORDER BY categoria, cod_linea, cod_articulo LIMIT $limitInf, $tamPag2" or die(mysql_error());

$res mysql_query($sqlBuscar); 

Pero me da error "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in..." en esta línea:

$numeroRegistros = mysql_num_rows($res);

Y el paginador es este, en el cual también necesito pasar las variables para que funcione:
Código PHP:
if($pagina>1

echo 
"<a class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&txt_criterio=".$txt_criterio."&buscar=>>'>"
echo 
"<class='txtPaginador11b'><< ANTERIOR</font>"
echo 
"</a>*"


for(
$i=$inicio;$i<=$final;$i++) 

if(
$i==$pagina

echo 
"<class='txtPaginador11b'><b>".$i." </b>"
}else{ 
echo 
"<a class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&txt_criterio=".$txt_criterio."&buscar=>>'>"
echo 
"<class='txtPaginador11b'>".$i."</a>*"


if(
$pagina<$numPags

echo 
"*<a class='txtPaginador11b' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&txt_criterio=".$txt_criterio."&buscar=>>'>"
echo 
"<class='txtPaginador11b'>SIGUIENTE >></a>";


echo 
"<div id='total_paginador'><font face='verdana' size='-2'>Total: ".$numeroRegistros." resultados</div>";

mysql_close($conexion); 
Le cambié la variable $txt_criterio por $buscar pero tampoco funcionó como para que me tome las variables así:
rpauto-resultb.php?txt_criterio=arranque%gol

pero no funcionó.

¿Me pueden decir donde está el error por favor?

Muchas gracias por la ayuda y saludos.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #7 (permalink)  
Antiguo 29/10/2011, 06:53
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

¿No se puede hacer así?
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #8 (permalink)  
Antiguo 29/10/2011, 07:44
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Duda con buscador exacto de frases

Bueno... no sé si es lo correcto pero modifiqué la línea del implode y funcionó.

Código PHP:
$txt_criterio $_GET["txt_criterio"];
$palabrasexplode(" "$txt_criterio);
$buscarimplode("%"$palabras); 
Lo único que no me busca son "partes" de una palabra. Si ponbo arranques no me trae las palabras que digan arranque sin la s

Saludos.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #9 (permalink)  
Antiguo 29/10/2011, 10:22
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Duda con buscador exacto de frases

Cita:
Bueno... ya probé con LIKE y FULLTEXT y no logro que me devuelva palabras de 2 ó 3 letras. Si coloco una palabra de 4 letras me devuelve resultados, pero con menos NO.
Si coloco faros gol me trae solo faros. Si coloco vw, por más que esté cargado en la base no me devuelve nada... directamente me dice que no se encontraron resultados.
Parece que no tienes ni idea de los indices FULLTEXT y como funcionan dichos tipos de busqueda en MySQL.

Directo del manual:
Cita:
The minimum and maximum lengths of words to be indexed are defined by the ft_min_word_len and ft_max_word_len system variables. (See Section 5.1.3, “Server System Variables”.) The default minimum value is four characters; the default maximum is version dependent. If you change either value, you must rebuild your FULLTEXT indexes. For example, if you want three-character words to be searchable, you can set the ft_min_word_len variable by putting the following lines in an option file:

[mysqld]
ft_min_word_len=3
Then restart the server and rebuild your FULLTEXT indexes. Note particularly the remarks regarding myisamchk in the instructions following this list.
Las búsquedas por defecto tienen un limite de 3 caracteres. Esto quiere decir que solo tomara en cuenta palabras de mas de 3 caracteres. Ahi mismo te dice como cambiar esta restricción.

Cita:
Lo único que no me busca son "partes" de una palabra. Si ponbo arranques no me trae las palabras que digan arranque sin la s
Debes usar un algoritmo que convierta una palabra en plural a su singular. Dicho algoritmo se llama: The Porter Stemming Algorithm.
http://www.forosdelweb.com/f14/porte...spanol-611779/
Hay unos links interesantes en el ultimo mensaje asi tambien como en la respuesta de jam1138
  #10 (permalink)  
Antiguo 29/10/2011, 14:03
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Duda con buscador exacto de frases

Mira te dejo un enlace de un buscador fulltext en el cual tiene un metodo que se le pasa el texto del input y genera una cadena para buscar con esta modalidad.

Buscador FullText
Aqui en mi sitio una version un poco mas vieja

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Etiquetas: exacto, frases, html, mysql, registro, sql, buscadores, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.