Comunidad de diseño web y desarrollo en internet online

Buscador Avanzado Filtros - Simil demotores deautos sitios

Citar            
MensajeEscrito el 03 Oct 2011 04:55 pm
Hola a todos!. Me encuentro realizando unas pruebas y haciendo un sitio de clasificados.
Bueno, paso a explicarles o mejor dicho a contarles y si alguien me explica como funciona o podria funcionar se lo agradeceria.

Estoy haciendo un buscador con muchos filtros.

1er consulta:
Como hacen los sitios citados para realizar una busqueda por medio de un codigo o caracteres muy corto, por ejemplo;

Código :

/autos-usados-chevrolet/cZ23QQnZ0

Donde cZ23QQnZ0 lleva toda la informacion, se puede cambiar la linea autos-usados-chevrolet que no pasa nada, se restablece

Yo estaba realizando mi buscador pero de esta manera

Código :

autos/ford/MA

Separo por medio de un explode y tengo por un lado el dato a buscar y por el otro el indice, el indice seria a que filtro pertenece, el MA seria MArca.

Si se busca mas informacion quedaria algo asi

Código :

autos/ford-modelo-version/MAMOVE

Lo mismo de antes, otra vez con explode separo los terminos y lo que serian los indices lo separo en dos.

Con esta parte no tengo problema, pero me gustaria saber si es practico el metodo por cual lo hago y me resulta muy curioso saber como lo hacen estos sitios por medio de esa linea.

2da consulta:
El tema de los filtros, al tener tantos filtros, aca se me complica.
Si realize una busqueda, ejemplo;

Código :

autos/ford-modelo-version/MAMOVE

Como hago cuando le saco uno de esos filtros, los links de los filtros. Por ejemplo, un filtro es marca, hago una consulta, muestro todas las marcas, el link si alguien quiere buscar esa marca seria agregando el termino e indice a la url.
Ahora cuando saco un filtro, como hago?.
Tengo que procesar la url en cada consulta de cada filtro para crear el link?. Seria un quilombo importante.
Otra cosa es que si tengo marca -> modelo -> version, cuando quito marca los otros filtros se tendrian que quitar.

Bueno en fin, no se como hacer un buscador avanzado, con varios filtros. No se cuales serian las mejores tecnicas, las mejores herramientas, ni los metodos apropiados.

Hago esta consulta porque no eh podido encontrar nada que me ayude con esto, todos los buscadores o articulos que encontre son relativamente faciles y con pocos terminos, filtros.

Desde ya gracias! Saludos!!

Por paganni

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Oct 2011 10:54 am
Hacer un motor de busqueada no es nada sencillo, hay que tener muy claro el manejo de bases de datos, utilizar expresiones regulares para encontrar palabras claves en textos utilizando diccionarios y eliminar las palabras que puedan no tener importancia (como articulos, preposiciones ....) y quedarse con las importantes (nombres sobre todo) Ademas la base de datos debe estar indexada para procesar rapidamente los grandes volumenes de busqueda.

dicho esto, puedes utilizar metadatos para buscar mas rapido, es decir, puedes tener una columna en la que se incluyen solo palabras clave para la busqueda y posteriormente incluir esa columna en la búsqueda, a parte de la marca modelo etc...

Si no quieres, porque es bastante complejo, utilizar expresiones regulares y tal puedes hacer como en los foros, que el usuario que inserte un anuncio, indique las etiquetas o palabras clave, separadas por comas(,) y posteriormente las introduces en la BD, El problema de esto es que los usuarios pondrán todo tipo de palabras que se les ocurra para que su anuncio se encuentre y puede que contaminen un poco la búsqueda, pero esto tambien pasa con las expresiones regulares. Puedes limitar el numero de etiqutas y asi el usuario pondra las mas importantes por ejemplo,

Un usuario quiere vender su coche y pone un anuncio debe rellenar el textArea en el qeu describe su anuncio y posteriormente puede tener un campo de texto en el que se le pide que coloque las palabras clave y coloca por ejemplo :

Venta , coche usado, Madrid, Ford Focus,

estas palabras podrian incluirse en la columna de meta datos para la busqueda, otro modo es hacer una plantilla (con un formulario) en el que el usuario introduzca algunos datos clave como los anteriores e incluirlos tu automáticamente en esas columnas meta. ademas siempre es bueno incluir el titulo del anuncio y algunas columnas de la BD con informacion clave.


En cuanto a lo de los link... sinceramente no he entendido la pregunta con tanto uso de la palabra "filtro" me he perdido .

De todas formas te respondere lo que creo que has preguntado y si me equivoco me lo dices.

Consultas a la BD por todas las marcas y modelos de doches, podrias directamente separar la marca y modelo en la misma lista y que el usuario concrete la busqueda es decir puedes tener la lista como

    opel

      corsa
      astra

    Ford

      focus
      fiesta



y que cada uno sea un link. Ademas al hacer click sobre uno de esos links puedes utilizar cookies para guardar datos o URLS que se generen automaticamente no es tan complicado tener tantas url como coches ya que en general solo cambiara un parametros que se leera automaticamente de la BD por ejemplo

<a href="resultadoBusqueda.php?marca=$marca&modelo=$model&indice=&indice">

o puedes simplemente utilizar cookies donde guardar marca, model e indice y al llegar al script resultadoBusqueda, hacer la busqueda leyendo desde las cookies, el problema es que si el usuario las tiene desactivadas, funcionara.

un saludo

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Oct 2011 07:29 pm
Wow bray, muchas gracias por tu respuesta!! muy completa.
Y como seria, mas o menos, muy por encima, usando expresiones regulares?.
Si, note que use mucho es palabra al final, cuando lo lei, pero bueno.

Lo que me referia de los links era, por ejemplo, como hacia para tener todos los datos de busqueda en una cadena tan corta, cito

Código :

/autos-usados-chevrolet/cZ23QQnZ0


Aca la cadena o parte de la url autos-usados-chevrolet esta solo para los buscadores, para decorar. Porque si hago esto

Código :

/0/cZ23QQnZ0


Se restablece a la url anterior, quiere decir que autos-usados-chevrolet tiene todos los datos, los campos y los indices. Puede ser como vos dijiste que tmb use cookies.
Pero eso me llamaba la atencion.

Otra cosa es que mi metodo de busqueda es buscar todo en una sola cadena, cito asi es mas facil

Código PHP :

if(preg_match("/MA/", $IdC)){ $C_Marca       = "marca,";            $PoscIndice = array_search("MA", $SepararCadaDos);      $B_marca       = "$datos[$PoscIndice]";}
if(preg_match("/MO/", $IdC)){ $C_Modelo    = "modelo,";          $PoscIndice = array_search("MO", $SepararCadaDos);      $B_Modelo       = "$datos[$PoscIndice]";}
if(preg_match("/VE/", $IdC)){ $C_Version    = "version,";          $PoscIndice = array_search("VE", $SepararCadaDos);      $B_Version       = "$datos[$PoscIndice]";}
if(preg_match("/PR/", $IdC)){ $C_Precio    = "precio,";          $PoscIndice = array_search("PR", $SepararCadaDos);      $B_Precio       = "$datos[$PoscIndice]";}
if(preg_match("/AN/", $IdC)){ $C_Ano       = "ano,";             $PoscIndice = array_search("AN", $SepararCadaDos);      $B_Ano          = "$datos[$PoscIndice]";}
if(preg_match("/CO/", $IdC)){ $C_Combustible= "combustible,";       $PoscIndice = array_search("CO", $SepararCadaDos);      $B_Combustible    = "$datos[$PoscIndice]";}


$busqueda          = "$B_marca $B_Modelo $B_Version $B_Precio $B_Ano $B_Combustible";
$busqueda_campos    = "$C_Marca $C_Modelo $C_Version $C_Precio $C_Ano $C_Combustible";

$FixComaCampos = trim(trim($busqueda_campos, " "), ",");

   $result = "SELECT marca,modelo,ano,precio,img,url , MATCH (".addslashes($FixComaCampos).") AGAINST ('".addslashes($busqueda)."' IN BOOLEAN MODE) AS Score FROM anuncios WHERE MATCH (".addslashes($FixComaCampos).") AGAINST ('".addslashes($busqueda)."' IN BOOLEAN MODE)";


Es un poco un quilombo, no se si estara bien pero yo encontre esa forma de procesar la url, separar y hacer una busqueda segun los campos.

A lo que me referia de los filtros y el link es que, yo hago una consulta a la base de datos, muestro los respecivos filtros, llamese, marca, modelo, version, año, precio, y genero un link con ese dato y su indice que indique que es. Ej, dato -> version . indice -> VE ( VErsion)
Ahora si quiero quitar ese dato o filto, digamos version, como hago? Digamos, como seria el link del boton para quitar ese filtro, tengo que procesar la url y generarlo en base a eso. Seria al reves de cuando lo agrego. Seria, que para cada filtro o datos a sumar y/o restar a la busqueda tengo que procesar la url.
A mi me da la sensacion de que hago muchas consultas o proceso mucho cosas que no se si es tan asi, ni tan largo, ni tan complicado, bueno, lo de complicado ya me dijiste que lo es. Pero esta bueno aprender.

Bueno, hasta me confundo o se me nubla todo para preguntar. Por ahora creo que es solo esto.

Gracias de nuevo y saludoss!

Por paganni

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Oct 2011 08:18 pm
Para el link no necesitas tener todos los datos de busqueda, en cada link tiene que haber un resultado de la busqueda por lo que la cadena del link en realidad solo tiene que llevarte a un identificador, si quieres, puedes montar un identificador cocatenando subcadneas por ejemplo

para coche usado opel corsa con la matricula 12365 puedes usar las 2 letras de cada palabra y los 3 o 4 primeros simbolos de la matricula, por ejemplo usopco123 o simplemente dar un identificador numérico a cada coche y colocarlo en el link por ejemplo

<a href = "resultadoBusqueda.php?id=33">
eso te llevaría al coche con el id 33 en la BD que es uno de los que encaja con el perfil buscado.

Las expresiones regulares son complejas, muy complejas no hay una forma facil de usarla, ten en cuenta que las expresiones regulares tienen que poder encontrar cualquier palabra perteneciente a un lenguaje, por lo tanto hacerlo de 0 requeriría un trabajo enorme y conocimientos de lenguajes formales y teorías de computación. No se si puede existir algún script en internet que haga esto ya. pero ten en cuenta que para usar una expresión regular tendrías que mirar la palabra letra por letra y compararla con un diccionario y comprobar a que palabra hace referencia de forma que pueda identificar si existe o no, es lo mismo qeu hacen los correctores ortográficos , los compiladores y los interpretes como el de php asi que imagina lo complejo que puede ser.

te recomiendo un método mas simple que seria que tu selecciones la información mas importante y esas sean las claves de búsqueda mas importantes por ejemplo pones un formulario donde el usario debe introducir de forma obligatoria
-Matricula
-Marca
-Modelo
-cilindrada
-Año de matriculación.

y estos datos son automaticamente claves principales de busqueda, digamos por ejemplo de nivel 1 siendo el 1 el nivel de mayor importancia.

Despues puedes dejar al usuario 5 recuadros de texto donde colocar cadenas que sirvan de claves secundarias o de nivel 2 y agregarlas tambien a cualquier busqueda de forma que primero aparezcan los resultados de las claves prinicpales y luego los de las secundarias o bien mediante una opcion de busqueda en profundidad donde aparezcan las claves secundarias.

otra opcion puede ser permitir al usuario indicar la importancia de cada clave mediante una puntuacion por ejemplo y utilizar cada clave según su prioridad.

Uf la respuesta me ha quedado muy larga creo jjejejejej es que he pensado muchas veces como haria un motor de busqueda jajajajaja

suerte

Por bray

65 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.