Foros del Web » Programando para Internet » PHP »

Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Estas en el tema de Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php) en el foro de PHP en Foros del Web. Hola amigos... (¡Ya busqué en google! jejeje, antes de que me respondan eso, pero encontré 50000 tutoriales y me los leí todos pero no pude ...
  #1 (permalink)  
Antiguo 03/04/2008, 14:28
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Pregunta Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Hola amigos...

(¡Ya busqué en google! jejeje, antes de que me respondan eso, pero encontré 50000 tutoriales y me los leí todos pero no pude dar con ninguno que resolviera mi problema.)

...estoy haciendo un pequeño search engine en mi sitio pero no logro dar con la solución a un problema de búsqueda que tengo: cuando busco dos o más palabras clave me da error.

Esta es la parte de mi código necesaria para entender como hago mi búsqueda en MySQL (tengo un campo Fulltext)

Cita:
<?PHP
include('./includes/config.php');

$busqueda = $_REQUEST["busqueda"]; /// aquí llega la palabra clave que

$cantidad = 10; //cantidad de resultados por pagina
$inicial = $pagina * $cantidad; /// esto sirve para la paginación de los resultados
$trozos = explode(" ", $busqueda); /// separa las palabras
$numero = count($trozos); /// cuenta la cantidad de palabras

if ($numero==1)
{
$cad = "SELECT * FROM tabla WHERE columna1 LIKE '%$busqueda%' OR columna2 LIKE '%$busqueda%' OR columna3 LIKE '%$busqueda%' AND state='true' LIMIT $inicial, $cantidad";
}
else
{
$cad = "SELECT * MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AS Score
FROM tabla WHERE MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AND state='true' LIMIT $inicial, $cantidad ORDER BY Score";
}

$resultados = mysql_query($cad);
Explicación detallada:
Tengo un form en donde puedo escribir la(s) palabra(s) clave, si busco una no tengo problemas pero si busco 2 o mas me da error.

Así que el error se encuentra aquí:
Cita:
SELECT * MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AS Score
FROM tabla WHERE MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AND state='true' LIMIT $inicial, $cantidad ORDER BY Score
Espero que esto sea suficiente como para ofrecerme un ayudita (si necesitan el resto del código o la tabla no tengo problemas en subirla -solo que no entra todo en un solo post, por eso no lo hice ahora-)
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com
  #2 (permalink)  
Antiguo 04/04/2008, 01:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Código PHP:
$cad "SELECT * MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AS Score
FROM tabla WHERE MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AND state='true' LIMIT $inicial, $cantidad ORDER BY Score"


No puedes usar un alias en ORDER BY y el * significa que quieres totdos los campos pero cuando lo usas creo que no se puede pedir mas salidas

Código PHP:
$cad "SELECT * 
FROM tabla WHERE MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AND state='true' LIMIT $inicial, $cantidad ORDER BY MATCH (columna1, columna2, columna3) AGAINST ('$busqueda')"

sin *

Código PHP:
$cad "SELECT campoA,campoB,...,campoN,MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AS Score 
FROM tabla WHERE MATCH (columna1, columna2, columna3) AGAINST ('$busqueda') AND state='true' LIMIT $inicial, $cantidad ORDER BY MATCH (columna1, columna2, columna3) AGAINST ('$busqueda')"

fijate en el uso de "," entre los nombres de los campos, creo que lo que no se puede hacer es "*, algo" donde algo són mas campos.

Quim
  #3 (permalink)  
Antiguo 04/04/2008, 04:49
 
Fecha de Ingreso: diciembre-2002
Ubicación: Toledo
Mensajes: 27
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Revisa tu tabla:

Quieres buscar en 3 campos; columna1, columna2, columna3
El nombre de la clave para tu busqueda es: busqueda
Y el tipo de busqueda mediante FULLTEXT

Los 3 campos tienen que ser un solo indice, el nombre del indice para los 3 campos tiene que ser "busqueda" y el tipo logicamente FULLTEXT

Cita:
ALTER TABLE tabla
ADD FULLTEXT busqueda (columna1 , columna2, columna3 )
Despues tu la consulta podría ser esta:
Cita:
$cad = "SELECT * ,MATCH (columna1, columna2, columna3) AGAINST ('$busqueda')
AS Score,
FROM tabla
WHERE state='true'
AND MATCH (columna1, columna2, columna3)
AGAINST ('$busqueda')
ORDER BY Score
LIMIT $inicial, $cantidad";
Ahora un pregunta... solo por curiosidad....
¿Por que cuando hay una sola palabra en la busqueda, no la realizas con FULLTEXT? veo que utizas LIKE
-Esa parte del código no la comprendo.
  #4 (permalink)  
Antiguo 04/04/2008, 11:48
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Gracias chicos pero no hay caso :(
No lo puedo hacer funcionar... ¿Será algo con mi tabla? Porque lo hago exactamente iguala como me dices pero nada... no funciona, me devuelve 0 (no error, simplemente 0)

Probé ejecutar la consulta en mysql y también me da 0 pero tengo, al menos, 2 campos que responden a ese criterio de búsqueda... no sé que pasa con esto.

Cita:
Ahora un pregunta... solo por curiosidad....
¿Por que cuando hay una sola palabra en la búsqueda, no la realizas con FULLTEXT? veo que utizas LIKE
-Esa parte del código no la comprendo.
Para que al menos funciona buscando una palabra hasta que encuentre el problema. =)
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com
  #5 (permalink)  
Antiguo 04/04/2008, 14:24
 
Fecha de Ingreso: diciembre-2002
Ubicación: Toledo
Mensajes: 27
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

¿Has comprobado que los 3 campos son FULLTEXT????
pon la extructura de la tabla para revisarla, seguro que es hay donde esa el fallo.
  #6 (permalink)  
Antiguo 04/04/2008, 18:04
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Si, las cree de la misma forma que lo haces tu:

Cita:
ALTER TABLE tabla
ADD FULLTEXT busqueda (columna1 , columna2, columna3 )
... pero sigue sin funcionar. =(

No entiendo... porque no es una cosa de PHP es una cosa de MySQL... porque si lo pruebo en MySQL tampoco me funciona =(
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com
  #7 (permalink)  
Antiguo 04/04/2008, 18:14
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Esta es mi base de datos:

Cita:
CREATE TABLE `tienda` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) collate utf8_unicode_ci NOT NULL,
`description` text collate utf8_unicode_ci NOT NULL,
`keywords` text collate utf8_unicode_ci NOT NULL,
`category` varchar(255) collate utf8_unicode_ci NOT NULL,
`state` varchar(5) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `busqueda` (`description`,`keywords`,`category`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com
  #8 (permalink)  
Antiguo 04/04/2008, 22:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

sidney rees,
probé tu tabla y a mí me funcionó bien con la primera consulta, la de tu primer post. Pero, claro, la diferencia es que yo borré el índice fulltext y lo volví a hacer igual, y posteriormente introduje los datos con el índice ya creado. Al guardarlos se van indexando. Tu situación quizás fue distinta, creaste el índice con posterioridad a la introducción de datos y necesitas, creo, indexarlos.
aplícale a tu base esto:
REPAIR TABLE tienda QUICK
y vuelve a probar con tu consulta buscando una palabra con PHPMyAdmin o lo que uses. Y si funciona, es que el índice lo hiciste con posterioridad y los datos no estaban indexados.
A ver si es eso.
  #9 (permalink)  
Antiguo 08/04/2008, 09:29
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Trasladado de BD a PHP. Favor no poner código de programación en BD.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #10 (permalink)  
Antiguo 08/04/2008, 10:04
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Siento el error BrujoNic.

Bueno, a ver si en esta sección tenemos mejor suerte porque en el de MySQL no le encontramos solución.

¿Alguien me puede ayudar?
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com

Última edición por sidney rees; 08/04/2008 a las 13:45
  #11 (permalink)  
Antiguo 08/04/2008, 11:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql, php)

Hola sidney rees,

Te recomiendo leas la documentación de MySQL

Debes de construir tu string de búsqueda de una forma especifica para que el motor de la base te devuelva los resultados adecuados.

Saludos.
  #12 (permalink)  
Antiguo 22/10/2008, 22:09
 
Fecha de Ingreso: agosto-2007
Ubicación: Duitama Boyaca Colombia
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql

Bueno 6 años despues...

pero la solucion es FALTA UNA COMA DESPUES DEL ASTERISCO

SELECT * , MATCH (`post`) AGAINST ('$q') AS pts
FROM `posts` WHERE MATCH(`post`) AGAINST ('$q') ORDER BY ID DESC, pts LIMIT $ini,21

Seleccionar TODOS los campos
de Tabla Posts
que coincidan con $q
y que los ordene por id y por pts
y que muestre 21 Registros a partir de $ini

pts es el Factor de Relevancia en la busqueda.
  #13 (permalink)  
Antiguo 22/10/2008, 22:40
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql

tip: poner un having para puntajes > 0 hara que solo aparezcan los registros que tuvieron coicidencia ;)
__________________
Degiovanni Emilio
developtus.com
  #14 (permalink)  
Antiguo 23/11/2008, 20:21
 
Fecha de Ingreso: agosto-2008
Mensajes: 23
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql

Bueno señores, no se cuando se haya creado este foro, pero quiero contribuir a este foro que encontre.

No creo que las tablas, o sus campos, o en el indice full text, esten mal, por lo que pude leer todo esta bien, seguramente el amigo esta realizando busquedas de palabras reservadas o stopwords de MySql, y si se realizan busquedas con estas palabras, de seguro no va a mostrar resultados.

Aca el link de las StopWords:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html

Saludos,
  #15 (permalink)  
Antiguo 23/11/2008, 20:29
Avatar de sidney rees  
Fecha de Ingreso: julio-2006
Ubicación: Argentina
Mensajes: 334
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problemas al buscar 2 o más palabras clave (search engine, fulltext, mysql

Hola! Yo soy quien inicio este topic con la pregunta, el problema lo resolví con la sugerencia de sysmaya...

... pero el aporte que haces haffe está muy bueno! Gracias! Estoy seguro de que me será muy útil.
__________________
¿Tienes problemas para terminar tu proyecto? Nosotros te ayudamos, visitanos en Sidneyrees.com
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 16:11.