Foros del Web » Programando para Internet » PHP »

Ayuda! Motor de busqueda

Estas en el tema de Ayuda! Motor de busqueda en el foro de PHP en Foros del Web. Hola! Nadamas posteo para que me ayuden un poco y ver cual es la mejor manera de crear un script de motor de busqueda que ...
  #1 (permalink)  
Antiguo 13/05/2003, 02:51
 
Fecha de Ingreso: marzo-2002
Ubicación: No se!
Mensajes: 121
Antigüedad: 22 años, 1 mes
Puntos: 1
Ayuda! Motor de busqueda

Hola!

Nadamas posteo para que me ayuden un poco y ver cual es la mejor manera de crear un script de motor de busqueda que indexe los archivos de mi sitio (por medio de meta-tags) y esa información la guarde en un archivo de texto para agilizar la busqueda, el script tendria estos archivos:
  • indexar.php Con este indexaria las paginas de mi sitio utilizando funciones de directorios, ficheros y tratamiento de cadenas, ya saben.
  • indexados.php Aqui es donde almacenaria la información de las paginas indexadas.
  • buscar.php Y con este relizaria la busqueda.

Tonto ¿no?

Para buscar en el archivo indexados.php utilzaria funciones de ficheros y al momento de buscar coincidencias con el archivo buscar.php se me ocurrio utilizar similar_text() que calcula la similitud entre dos cadenas y devuelve una relevancia.

Ahora la pregunta ¿esta es la mejor forma de hacerlo ó me la estoy complicando?

Si alguien sabe otra manera diganme plis.

Y GRACIAS DESDE ANTES.
  #2 (permalink)  
Antiguo 13/05/2003, 10:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cuando enfoques un proyecto o problema ... no "veas" tu proyecto como esos archivos .php que crees que al final de todo te van a resultar ..

Enfocalo por "trozos" de lógica que te haga falta .. como por ejemplo:

* función/método para leer las cabeceras de una página y/o si hace falta abrir la página que voy a leer esas cabeceras en modo "lectura". Si quieres que "busque" toda página de tu sistio (que tenga sub-directorios) deberas usar funciones para leer directorios y archivos de forma recursiva. Esto lo puedes hacer con al función de PHP:
get_meta_tag() (para leer las cabeceras "META" y la classe dir() junto con más funciones afines para "explorar" tu sitio.

* funcion(es) para guardar las referencias que has encontrado (METAS tag) y de la página que provienen en algún formato predifinido .. Ejemplo:

pagina.tal|meta titulo|meta keywords|meta .. etc .. <- registro1
pagina.tal|meta titulo|meta keywords|meta .. etc .. <- registro2
pagina.tal|meta titulo|meta keywords|meta .. etc .. <- registroN

Esto te ayudará a implementar tu "buscador.php" ... A su vez esas funciones generarian tu "indexados.tal" ...

* Funciones para gestionar ese archivo "indexados.tal" donde tienes guardato tus datos de indexación de tus paginas en el formato dado.

Si guardas los datos según la estructura planteada deberías leer cada "linea" del archivo que en este caso correspondería a un registro y dendro de ese "registro" (lo puedes hacer con funciones como file() que te entregará un array con dichos "registros") leer el campo que quieras realizar la busqueda (previo uso de explode() al caracter "|" para obtener el campo .. Una vez obtenido tu "registro -> campo" a buscar .. tan sólo tratalo como una "cadena" que es lo que es y aplicale la función que estimes oportuno .. como la que proponías o por ejemplo substr_count() que te dirá si existe la cadena que buscas en la cadena donde lo buscas (con nº de coincidencias incluso). Esto sería para implementar tu "buscador" dentro de los datos del archivo indexados.tal con la estructuctura dada.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 10/04/2007, 12:20
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Hola a todos, queria saber como puedo hacer una busqueda por similitud no muy compleja de un campo en mi Base de datos.

Supongamos que tengo la tabla PERSONA y sus campos APELLIDOS y NOMBRES.

En el campo APELLIDOS se tendria logicamente 1 o 2 cadenas por ejemplo: Perez Garcia o Perez Claros o Perez Rojas o tambien podria ser solamente Perez.

Si hago una consulta SELECT nombres FROM persona WHERE apellidos='Perez';

Como hago para que se incluya tambien a los que no son solamente PEREZ en sus apellidos?? o sea tambien se considere a los Perez Garcia o Perez Claros o Perez Rojas???
  #4 (permalink)  
Antiguo 10/04/2007, 14:28
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

usando MATCH AGAIN en tus consultas.... me explico

este es el tuyo:
Código PHP:
SELECT nombres FROM persona WHERE apellidos='Perez'
quedaria asi:
Código PHP:
SELECT nombres FROM persona WHERE MATCH(apellidosAGAINST('Perez'); 
PD: tu campo apellidos debe ser de texto completo para ello ejecuta lo siguiente:
Código PHP:
ALTER TABLE `nombresADD FULLTEXT (
`
apellidos`

saludos!!!

agregado 20 minutos despues...
mira este link y estudia a ver si te sale:
http://www.mysql-hispano.org/page.php?id=15&pag=2
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!

Última edición por el cirujano; 10/04/2007 a las 14:38
  #5 (permalink)  
Antiguo 10/04/2007, 20:33
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

AMEN! (Lo digo por tu firma...)

Gracias por la respuesta... pero para que me sirve:

Código PHP:
ALTER TABLE `nombresADD FULLTEXT (
`
apellidos`

Mis campos son varchar, eso influye mucho?? Tengo que convertirlos a TEXT??? este pedazo de codigo PHP donde lo utilizo??? Antes de hacer la consulta???
  #6 (permalink)  
Antiguo 11/04/2007, 10:40
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

no importa si tu campo es varchar, en tu PhpMyAdmin vas al campo en cuestion y le indicas que ese campo va a ser fulltext el codigo que puse alli es el resultado que te da despues hacer la conversion....
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #7 (permalink)  
Antiguo 11/04/2007, 11:29
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Ah.. Ok.. Gracias... eso tambien puedo hacerlo al momento de crear por primera vez mi tabla no??

Y una ultima pregunta, para que sirve ADD FULLTEXT??

Muchisimas gracias (otra vez) por tu respuesta!
  #8 (permalink)  
Antiguo 11/04/2007, 11:41
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

Eso segun estuve leyendo por los sitios de internet, lo que hace es ayudar en la busqueda no importando el orden de tu palabra clave... osea:

pedro perez
perez carlos
jose maria perez santigado

siempre buscara la palabra PEREZ este ubicado en el orden que sea a diferencia del modo nombre like '%$nombre%' o nombre='%$nombre%' que es, si tu buscas carlos perez aunque este en tu BD si no esta en el orden que esta guardado no te aparece el resultado mientras que con el MATCH AGAIN no importa el orden...

mas informacion en:
http://www.mysql-hispano.org/page.php?id=15&pag=2
http://www.programacion.net/articulo/adr_buscador/
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #9 (permalink)  
Antiguo 11/04/2007, 20:13
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Muchas gracias CIRUJANO!... Voy a probar y postear mis resultados.
  #10 (permalink)  
Antiguo 15/04/2007, 20:20
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Hoal CIRUJANO! Estaba probando el codigo que me diste, pero acabo de darme cuenta de algo.. tu me sugeriste esto:

SELECT nombres FROM persona WHERE MATCH(apellidos) AGAINST('Perez')';

Como tengo que hacerlo si quiero hacer una consutla de varios campos??? O Sea:

SELECT nombres, direccion, telefono, apellidos FROM persona donde el apellido es PEREZ???

He probado trabando de hacer solo la seleccion de un campo y me dice que no puedo ejecutar la connsulta... Estoy haciendo algo mal??

ALTER TABLE `nombres` ADD FULLTEXT (
`apellidos`
)


Aqui como marcaria mas campos si es que quiero seleccionar otros mas aparte de nombre??
  #11 (permalink)  
Antiguo 17/04/2007, 10:56
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

Segun el articulo que te di mas arriba dice:

SELECT * FROM persona WHERE MATCH(nombres, direccion, telefono, apellidos) AGAINST('Perez')';

pero veo innecesario el campo telefono....
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #12 (permalink)  
Antiguo 18/04/2007, 21:16
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Por que omitir el telefono?? Bueno, yo solo lo mencione como un ejemplo cualquiera, mi duda era como tenia que declarar para hacer una seleccion de varios campos, a partir de la comparaciond e un campo APELLIDO e igualarlo a un valor 'PEREZ' (Por ejemplo).

En el MATCH solo vienen los campos que hay que seleccionar??? O vienen los campos donde se buscara???

Bueno lo mas importante es como declaro esto para varios campos:

ALTER TABLE `nombres` ADD FULLTEXT (
`apellidos`
)


Asi:

ALTER TABLE `nombres, apellidos, direccion` ADD FULLTEXT (
`apellidos`
) ???


Creo que no....
  #13 (permalink)  
Antiguo 20/04/2007, 10:40
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

ejecutalo en la seccion de SQL dentro de tu PhpMyAdmin

ALTER TABLE `nombres, apellidos, direccion` ADD FULLTEXT (
`apellidos`
)
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #14 (permalink)  
Antiguo 21/04/2007, 12:07
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Muchas gracias por tus respuestas Cirujano.. pruebo y comento resultados....
  #15 (permalink)  
Antiguo 03/05/2007, 21:08
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Hola cirujano, tal vez tu sepas como puedo hacer una consulta, donde su condicion este sujeta a un intervalo. Me explico:

Obtengo estos 2 datos (Que son años):

2004
2008

Y quisiera hacer una consulta que abarque este intervalo (Del 2004 al 2008)

Por ejemplo
Código:
$sql="select sexo_cs FROM historia_clinica WHERE sexo_cs = 'Masculino' 
AND año_registro = AÑO ";
Para esta consulta AÑO tendria que ser 2004, 2005, 2006, 2007 y 2008. Serian 5 consultas... Como podria hacer eso de manera sistematica???

Espero tu respuesta o de alguien que pueda ayudarme.. Muchisimas gracias....
  #16 (permalink)  
Antiguo 04/05/2007, 07:23
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 21 años
Puntos: 3
Re: Ayuda! Motor de busqueda

Código PHP:
$anio_inicial "2004";
$anio_final "2008";
$sql="select sexo_cs FROM historia_clinica WHERE sexo_cs = 'Masculino' 
AND año_registro>='$anio_inicial' and año_registro<='$anio_final' "
;
// no uses Ñ ni caracteres especiales para nombrar campos en la BD 
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #17 (permalink)  
Antiguo 06/05/2007, 20:27
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Ayuda! Motor de busqueda

Gracias El_Patron, lo probe y todo ok... ahora que me doy cuenta no estoy recordando ni haciendo gala de mis nociones basicas de MYSQL.. que torpe.... No se por que busco soluciones complicadas...

De todos modos, gracias otra vez.... BYE
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:21.