Foros del Web » Programando para Internet » PHP »

buscador

Estas en el tema de buscador en el foro de PHP en Foros del Web. hola tengo este script que funciona perfecto al hacer una búsqueda en mi base de datos , solo que tiene un pequeño problema y es ...
  #1 (permalink)  
Antiguo 09/03/2014, 13:57
 
Fecha de Ingreso: abril-2011
Ubicación: barcelona
Mensajes: 127
Antigüedad: 13 años
Puntos: 2
buscador

hola tengo este script que funciona perfecto al hacer una búsqueda en mi base de datos , solo que tiene un pequeño problema y es que si pongo una palabra en plural no me busca y no se como solucionarlo alguien podría decirme que debo añadirle bueno exactamente solo muestra si pones la palabra exacta yo quiero que me encuentre si coinciden letras en la palabra

por ejemplo: si busco canario me lo encuentra si pongo canarios no me muestra o si añado cualquier letra mas.

alguien sabe como puedo decirle para que me encuentre la palabra aunque añada mas letras a ella.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.  
  5. if (!empty($_POST['busqueda'])){
  6. $busqueda=$_POST['busqueda'];
  7. //CUENTA EL NUMERO DE PALABRAS
  8. $trozos=explode(" ",$busqueda);
  9. $numero=count($trozos);
  10. if ($numero==1) {
  11. //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
  12. $cadbusca="SELECT * FROM productos WHERE nombre LIKE '%$busqueda%' OR raza LIKE '%$busqueda%' OR categoria LIKE '%$busqueda%'LIMIT 50";
  13.  
  14. } elseif ($numero>1) {
  15. //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
  16. //busqueda de frases con mas de una palabra y un algoritmo especializado
  17. $cadbusca="SELECT *, MATCH ( categoria, raza, nombre )
  18. AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
  19. MATCH ( categoria, raza, nombre ) AGAINST ( '$busqueda'IN
  20. BOOLEAN MODE  ) ORDER BY Score DESC LIMIT 50";
  21. }
  22.  
  23.  
  24.  
  25.  
  26.  
  27. $result=mysql_query($cadbusca) or die (mysql_error());
  28.  
  29. while ( $row = mysql_fetch_object ($result)){
  30. echo $row ->nombre."<br>";
  31. echo $row ->raza."<br>";
  32. echo $row ->categoria."<br>";
  33. }
  34. }
  35. ?>

Última edición por ivan_pala21; 09/03/2014 a las 14:07
  #2 (permalink)  
Antiguo 09/03/2014, 14:53
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: buscador

La consulta es correcta, sin embargo, si por ejemplo buscas "Juan " (con el espacio después de la palabra) y solamente existe "Juan" en la BD, no habrán coincidencias puesto que "Juan " no es un dato existente en la BD.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 09/03/2014, 15:30
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: buscador

Hola.
Cita:
si busco canario me lo encuentra si pongo canarios no me muestra o si añado cualquier letra mas.
osea, tu quieres que si el tipo escribe: canariosholamellamoralph le muestre los resultados de canarios. eso esta mas cerca de las artes arcanas de la programacion. (lo que no quiere decir que no se pueda, de hecho, si escribes canariosholamellamoralph en google, este te sugiere buscar canarios.)

Si tu problema es solo del plural, podrias hacer algo asi:

1) usar trim.
2) strtolower
3) concatenar un '_' (u otro caracter)
4) str_replace('ces_', 'z')
5) rtrm de "es_"
6) rtrim de "s_"
7) rtrim de '_'

con eso eliminarias el plural, pero aun asi, no funciona con todas las palabras, el idioma español es muy variado (ni hablar si es multilenguaje)

si quieres mejorarlo, agarra un diccionario, leete todas las reglas ortograficas y empeza a armar filtros normalizadores (o googlealos, quizas alguien ya los hizo antes y los compartio)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: buscador
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 18:24.