Busqueda en Visual Foxpro Tipo Google Alguien lo ha hecho?

3,876 views
Skip to first unread message

Juan Moreyra

unread,
Sep 7, 2009, 9:34:20 PM9/7/09
to mundovis...@googlegroups.com
Busqueda en Visual Foxpro Tipo Google
 
He Usado diversas busquedas en un grid:

- Busqueda con Filtros SET FILT TO "texto" $ lista_campos
- Por indices CDX combinando con SET KEY TO "texto"

 
No se si habran mas formas de buscar dentro de una tabla.
    
                     Busqueda          Busqueda
                     En Filtros        En Indices
                     ----------        ----------
Tabla Grande       : Lento             Rapido
Tabla Pequeña      : Rapido            Rapido
En cualquier parte : Moderado          no se puede
Texto al inicio    : Moderado          Rapido

 
Usando el SET KEY inclusive con tablas de 2 millones de registros, es rapido y lo he probado, cosa que el SET FILT TO sencillamente se cuelga o demora demasiado
 
Estaba pensando si ya hay alguna forma de hacer una busqueda tipo google en visual foxpro, o conbinando mas o menos la idea de su busqueda.
 
Ejercicio:
Suponiendo que tengo un catalago de Clientes con 10 mil registros
- Codigo    C 10
- Nombre    C 80
- Apellido  C 80
- Direccion C 80

Un formulario que contenga minimo un textbox para ingresar la busqueda y un grid para mostrar el resultado con las 10 o 20 primeros registros coincidentes.
Dandole click me muestre los datos del registro, en caso que hayan mas de 20 mostrar pag2, pag3, next, algo asi como google.

 
Es factible?
 
Se me estaba ocurriendo algo asi como una tabla auxiliar en donde se almacene cada palabra de un registro, asumiendo que un registro tiene codigo (1 palabra), nombre (2 palabras), apellido (2 palabras), direccion (7 palabras), ese registro tendria cerca de 12 palabras aproximadamente.
 
Estoy tratando de explicar algo que lo tengo en la cabeza nomas :( y no se por donde empezar.
 
Resumiendo:
 
En un sistema integrado, que contienen mas de 20 tablas, entre catalogos y movimientos y otros, queria buscar una palabra y que me diga en donde se encuentra y dandole click me muestre dicho registro, ya sea de un catalogo, de un movimiento, de lo que sea.
 
** Algo asi como si pusiera en el directorio del explorador buscar y seleccione las tablas y ponga el texto a buscar
** Como la busqueda del google

 
Supongo que pocos o casi nadie entendio, pero los que entendieron, a ver si tienen alguna idea o ya hay algo parecido, porque supongo que a mas de uno que hace sistemas, el principal problema a veces son las busquedas.
 
Saludos.
 
PD: Tratare de armar algo descente a ver como me sale, aunque si alguien tiene algo armado, o lo ha visto a ver si colabora.
 

Juan Moreyra



¿Quieres que tus amigos de Messenger sigan tus movimientos de Facebook? ¡Conéctalos ya!

Daniel Sánchez

unread,
Sep 7, 2009, 11:02:13 PM9/7/09
to mundovis...@googlegroups.com
Yo en lugar de usar set filter o set key te recomendaría usar consultas sql ejemplo 

select * from catalogo where descripcion like '%'+tudato+'%' into table resultados       &&Para datos que se encuentra en alguna parte del campo

select * from catalogo where descripcion like tudato+'%' into table resultados       &&Para datos que se encuentra al inicio de la campo

select * from catalogo where descripcion like '%'+tudato into table resultados       &&Para datos que se encuentra al final de la campo

si pruebas en tu tabla de mas de 2 millones de registros una consulta parecida obtendrás una nueva tabla con las coincidencias en aproximadamente 2 segundos, que es muchisimo mejor que usar lo inicialmente indicado.


Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil 044-949398047
Trujillo - Perú

Juan Moreyra

unread,
Sep 8, 2009, 12:03:50 AM9/8/09
to mundovis...@googlegroups.com

 
No es lo que quiero, si no hubiera puesto: "Como busco un texto dentro de una tabla" si es la respuesta 

Por eso decia, a lo mejor no me entienden bien, pero imaginate que google haga ese tipo de busqueda dentro de todos los HTM que se conforman las paginas, cada consulta seria interminable
 
Lo que quiero buscar por ejemplo es: "Daniel Escobar"
 
y que me muestre todos los registros o los primeros 10 que dentro de la tabla tengan esas 2 ocurrencias, no solo la palabra al inicio, al centro o al final
 
Si buscara 4, 5, 6, 7 o mas palabras, que tambien las busque
 
Obviamente haria una rutina que me separe las palabras y arme la instruccion WHER y lo agrege a mi cursor, pero esa no es la idea, eso demora, y se limitaria a una sola tabla, como dije, el ejemplo inicial era para aplicarlo en una tabla, pero como meta final es aplicarlo a todo el sistema con todas sus tablas.
 
Por ejemplo, esta idea me salio, a raiz de que me puse a pensar, como michi hace google su busqueda, al poner algunas palabras busca dentro de toda su data y nos muestra los enlaces a las diferentes paginas en segundos, obviamente lo primero que dije, "estos no hacen un query de todo".
 
Lo que creo, es que inclusive debe manejar como diccionarios de palabras e inumerables tablas con direcciones de las paginas y en que parte se encuentra dichas palabra, y muestra las primeras 10 o 20, y asi sucesivamente.
 
Si tu tienes una pagina web personal, puedes activar la rutina de google, para que haga lo mismo, pero solo dentro de tu pagina y todos los enlaces de tu pagina.
 
Algo asi quiero hacer
 
La busqueda que planteas es una opcion, pero es lo mismo que un SET FILT TO a nivel CREATE CURSOR o SQL.
 
Supongo Daniel que no crees que eso haga google cuando buscamos una palabra... Para que me entiendas mejor... Si tu fueras Google, como buscarias un conjunto de palabras dentro de un sistema? a ver si me entiendes y nos loqueamos juntos.
 
 

Juan Moreyra
 


Date: Mon, 7 Sep 2009 22:02:13 -0500
Subject: [Mundo Visual FoxPro] Re: Busqueda en Visual Foxpro Tipo Google Alguien lo ha hecho?
From: resets...@gmail.com
To: mundovis...@googlegroups.com

Carlos Miguel FARIAS

unread,
Sep 8, 2009, 7:17:32 AM9/8/09
to mundovis...@googlegroups.com
Estimado Juan:
No se como lo hara Google, que tengo entendido tienen un sistema de indexado de contenidos especialmente desarrollados por ellos, que por supuesto no podes instrumentarlo con tablas dbf.
Trabajo en el desarrollo de sitios web, utilizando mySQL (podría ser postgress, sql server, oracle, etc.). Estos motores de datos tienen un tipo de index que en el caso de mysql se llaman fulltext, este indice puede abarcar varios campos
En este indice, que indexa palabras, puede hacer una busqueda con un comando especial (función mas bien) dentro del where, y además el motor tiene la capacidad de indicarte (con otra función) que tan acertado es la selección.
Ademas permite hacer busquedas por palabras parciales, incluir palabras, excluirlas, obligarlas, etc. tal o parecido a lo que hace google.
Para hacer lo que tu dices, en vfp, tendrías que hacer varias cosas que no veo como optimizarlas.
Primero: Crear una vista sobre la o las tablas, donde concatenas todos los campos de busqueda (agregandolo al resto de lo que queres mostrar), y haces luego una busqueda con un where con like o lo que sea (una cosa, like "%"+ lcBusco´+ "%" en el where busca en cualquier parte de la palabra, inclusive principio y final).
Esta opción puede ser lenta porque tiene que crear la vista al iniciar la consulta.
Segundo: Crearte un indice de palabras (diccionario) sobre los campos que quieres buscar.
Ese diccionario sería de la forma cPalabra C(64), cTabla C(32), cClavePrimaria c(15)
Los tamaños de los campos son solo indicativos, cPalabra debe poder contener la palabra mas grande que manejas, pero cuando mas chico mejor, porque esa columna esta indexada (junto a cClavePrimaria, como clave primaria unique).
Cada vez que agregas un registro a las tablas donde queres buscar, debes analizar cada uno de los campos, extraer las palabras alli usadas, te fijas si ya no existe en el diccionario, con la clave primaria del registro, y si no está la agregas.
En el caso de modificar un registro, debes revisar por cada palabra en los campos modificados, para ver si debes borrar entradas en Diccionario, o agregar nuevas entradas.
Para las busquedas, haces un select sobre el diccionario con la palabra o palabras que quieres buscar, y el select te devuelve una lista de entradas donde tenes la clave primaria y la tabla donde esta la palabra buscada.
Si buscas sobre una sola tabla podes hacer alli mismo el join y recuperas los registros que quieras.
Para hacer el paginado de google, en _TALLY tenes el total de registros.
O sea que lo que importa aca es como creas el diccionario (no creo que te afecte mucho el tiempo de inserción, actualización de registros, puede que tarde un monton, la creación inicial, sobre todo si ya tenes muchos registros).
En realidad, después las consultas las podes hacer como quieras, pero esto es la única forma que le veo de hacer buscas rápidas por palabras, el diccionario es el equivalente al fulltext de otros sgbd.
Saludos: Miguel

Julio Cesar Rodriguez Dominguez

unread,
Sep 8, 2009, 9:52:02 AM9/8/09
to mundovis...@googlegroups.com


El 8 de septiembre de 2009 06:17, Carlos Miguel FARIAS <carlosmig...@gmail.com> escribió:
Estimado Juan:
No se como lo hara Google, que tengo entendido tienen un sistema de indexado de contenidos especialmente desarrollados por ellos, que por supuesto no podes instrumentarlo con tablas dbf.
Trabajo en el desarrollo de sitios web, utilizando mySQL (podría ser postgress, sql server, oracle, etc.). Estos motores de datos tienen un tipo de index que en el caso de mysql se llaman fulltext, este indice puede abarcar varios campos
En este indice, que indexa palabras, puede hacer una busqueda con un comando especial (función mas bien) dentro del where, y además el motor tiene la capacidad de indicarte (con otra función) que tan acertado es la selección.
Ademas permite hacer busquedas por palabras parciales, incluir palabras, excluirlas, obligarlas, etc. tal o parecido a lo que hace google.

Estoy de acuerdo con Miguel, en PostgreSql igual se llama Full Text Search.

Intel Man

unread,
Sep 8, 2009, 10:25:44 AM9/8/09
to mundovis...@googlegroups.com
Hola, no creo que google tenga cientos y cientos de tablas para la busqueda de paginas, yo creo que solo debe tener "una principal", donde estan indexadas (ver mi significado de indexadas mas adelante :P  ) y alli apuntan a la url de la pagina que contiene la busqueda.

INDEXADAS: Palabras significativas (osea de 4 o mas letras) que son separadas de cada pagina para colocarlo en su "tabla principal"  por ejemplo una pagina que contenga: "programadores de visual foxpro son zorros" y otras paginas XX

Entonces esa tabla podria contener:

campo_palabra     campo_pagina
programadores     url a pagina a
programadores     url a pagina b
visual                      url a pagina a
foxpro                     url a pagina a
foxpro                     url a pagina b
foxpro                     url a pagina c
zorros                     url a pagina a


Algo asi debe ser tu tabla principal indexada

Ya buscar en varias tablas en un sistemas es un poco mas complicado pero no imposible ;)

Se tendria un par de campos mas en donde podria ser el nombre de tabla y campo que se encuentra el dato, pero habria que tomar en cuenta si se buscarian datos numericos tambien :S

BUeno esa es mi idea de como google indexa sus paginas tan rapido , mas rapido que una bala :P

Saludos




From: juanmor...@hotmail.com
To: mundovis...@googlegroups.com

Subject: [Mundo Visual FoxPro] Re: Busqueda en Visual Foxpro Tipo Google Alguien lo ha hecho?
Date: Tue, 8 Sep 2009 04:03:50 +0000
</html




Hay tantos ordenadores como personas. ¡Descubre ahora cuál eres tú!

Julio Cesar Rodriguez Dominguez

unread,
Sep 8, 2009, 10:47:25 AM9/8/09
to mundovis...@googlegroups.com


El 8 de septiembre de 2009 09:25, Intel Man <intel_m...@hotmail.com> escribió:
Hola, no creo que google tenga cientos y cientos de tablas para la busqueda de paginas, yo creo que solo debe tener "una principal", donde estan indexadas (ver mi significado de indexadas mas adelante :P  ) y alli apuntan a la url de la pagina que contiene la busqueda.


Algo sobre google. "Anatomía de un motor de búsqueda a gran escala de web hipertextual." : http://www.joseduenas.com/archivos/como-funciona-google.

Link directo: http://www.joseduenas.com/wp-content/uploads/2007/06/presentacion_google.pdf


Juan Moreyra

unread,
Sep 8, 2009, 10:58:51 AM9/8/09
to mundovis...@googlegroups.com


Alguien que me entendio

 

Es lo mismo que pensaba , no se mucho del tema, si tienes enlaces para buscar dentro de la web para informarme mas del tema, te agradeceria

 
De como manejarlo por medio de palabras asi como tu estructura propuesta "cPalabra C(64), cTabla C(32), cClavePrimaria c(15)" es practicamente lo primero que se me vino a la cabeza. El problema es que solo manejaria busquedas a nivel de 1 palabra
 
Entonces pensando un poquito mas se me vino a la mente manejar tablas como:
cPalabra C(64), cPalabra02 C(64), cPalabra03 C(64), cPalabra04 C(64), cTabla C(32), cClavePrimaria c(15)
Para busquedas de mas de una palabra, pero el diccionario seria enorme
 
Entonces se me ocurre una tabla algo asi:
PALABRAS: cClave(10), cPalabra C(64)
 
Y la otra
ENLACES : cClave(10), cClave02(10), cClave03(10),  cClave04(10), cClave05(10), cClave06(10), cTabla C(32), cClavePrimaria c(15)
 
En donde podria combinar hasta busquedas por 6 palabras dentro de un registro
 
El campo cClave seria un correlativo de palabras a procesar (solo con el fin de abreviar las 64 letras y posteriormente hacer busquedas, pueden ser menos caracteres aunque 10 caracteres llegas facil a 9mil millones de palabras)
 
El indice CDX aguanta hasta aproximadamente 250 caracteres, osea 25 palabras usando a 10 caracteres, o 4 palabras a 60 caracteres, me conformaria con 6 palabras a 10 caracteres.
 
Antes de grabar en la tabla ENLACES, las 6 palabras las ordenaria segun su cClave para que cuando haga las busquedas no importe el orden que haya puesto las palabras a buscar, siempre encuentre los mismos enlaces y los agrupe de una manera adecuada.
 
Y teniendo estas 2 tablitas haria lo siguiente:
- Separar las palabras a buscar
- Buscar su cClave, en caso que no este en la tabla PALABRAS Crearlas, ikgualmente obtener su cClave
- Ordenar las 6 palabras en m.cClave, m.cClave02,  m.cClave03,  m.cClave04,  m.cClave05,  m.cClave06
- Hacer un SEEK concatenando las 6 palabras y obtener los 10 primeros  o usar un SET KEY
  Me encantan estos comandos porque son rapidos, y directo a lo que necesito, cualquier query demora mas, cuando hablamos de tablas grandes
 
Y cuando te refieres a:


"O sea que lo que importa aca es como creas el diccionario (no creo que te afecte mucho el tiempo de inserción, actualización de registros, puede que tarde un monton, la creación inicial, sobre todo si ya tenes muchos registros)."
 

Si tienes razon, tambien lo habia pensado, por eso mi ejemplo se basaba en una sola tabla, la idea es ponerla a funcionar y despues aplicarla a todo el sistema,  obviamente generar una rutina en donde le das las tablas a procesar y se encarga de armar las tablas de palabras, que demorarian regular. Pero una vez armada, la busqueda seria rapida.
 
Si tienes mas info para buscar en la web seria de ayuda, a veces me aburro programando, pero cuando se me vienen cositas asi a la cabeza, me entretendo haciendolas, o muriendo en el intento
 
Saludos.
 
 
Juan Moreyra
 



Date: Tue, 8 Sep 2009 08:17:32 -0300


Subject: [Mundo Visual FoxPro] Re: Busqueda en Visual Foxpro Tipo Google Alguien lo ha hecho?



Estimado Juan:
No se como lo hara Google, que tengo entendido tienen un sistema de indexado de contenidos especialmente desarrollados por ellos, que por supuesto no podes instrumentarlo con tablas dbf.
Trabajo en el desarrollo de sitios web, utilizando mySQL (podría ser postgress, sql server, oracle, etc.). Estos motores de datos tienen un tipo de index que en el caso de mysql se llaman fulltext, este indice puede abarcar varios campos
En este indice, que indexa palabras, puede hacer una busqueda con un comando especial (función mas bien) dentro del where, y además el motor tiene la capacidad de indicarte (con otra función) que tan acertado es la selección.
Ademas permite hacer busquedas por palabras parciales, incluir palabras, excluirlas, obligarlas, etc. tal o parecido a lo que hace google.
Para hacer lo que tu dices, en vfp, tendrías que hacer varias cosas que no veo como optimizarlas.
Primero: Crear una vista sobre la o las tablas, donde concatenas todos los campos de busqueda (agregandolo al resto de lo que queres mostrar), y haces luego una busqueda con un where con like o lo que sea (una cosa, like "%"+ lcBusco´+ "%" en el where busca en cualquier parte de la palabra, inclusive principio y final).
Esta opción puede ser lenta porque tiene que crear la vista al iniciar la consulta.
Segundo: Crearte un indice de palabras (diccionario) sobre los campos que quieres buscar.
Ese diccionario sería de la forma cPalabra C(64), cTabla C(32), cClavePrimaria c(15)
Los tamaños de los campos son solo indicativos, cPalabra debe poder contener la palabra mas grande que manejas, pero cuando mas chico mejor, porque esa columna esta indexada (junto a cClavePrimaria, como clave primaria unique).
Cada vez que agregas un registro a las tablas donde queres buscar, debes analizar cada uno de los campos, extraer las palabras alli usadas, te fijas si ya no existe en el diccionario, con la clave primaria del registro, y si no está la agregas.
En el caso de modificar un registro, debes revisar por cada palabra en los campos modificados, para ver si debes borrar entradas en Diccionario, o agregar nuevas entradas.
Para las busquedas, haces un select sobre el diccionario con la palabra o palabras que quieres buscar, y el select te devuelve una lista de entradas donde tenes la clave primaria y la tabla donde esta la palabra buscada.
Si buscas sobre una sola tabla podes hacer alli mismo el join y recuperas los registros que quieras.
Para hacer el paginado de google, en _TALLY tenes el total de registros.
O sea que lo que importa aca es como creas el diccionario (no creo que te afecte mucho el tiempo de inserción, actualización de registros, puede que tarde un monton, la creación inicial, sobre todo si ya tenes muchos registros).
En realidad, después las consultas las podes hacer como quieras, pero esto es la única forma que le veo de hacer buscas rápidas por palabras, el diccionario es el equivalente al fulltext de otros sgbd.
Saludos: Miguel

Domingo Cuevas

unread,
Sep 8, 2009, 11:40:35 AM9/8/09
to mundovis...@googlegroups.com
Estoy usando CursorAdapter para trabajar con MS Sql, cuando en el SelectCMD tengo una condicion y no hay registro que complu con esta condicion cuando trato de usar la tabla me dice que ese alias no existe.
Ej.:
CursorAdapter.SelectCMD='Select * From Tabla1 Where Campo=0'
CursorAdapter.Alias='Tabla1'
 
Select  Tabla1 (Me dice que este alias no existe)
 
Le ha pasado? como lo resolvieron?
 
Gracias,
 
Domingo Cuevas
Rep. Dom.

 


Domingo Cuevas

unread,
Sep 8, 2009, 3:23:14 PM9/8/09
to mundovis...@googlegroups.com
Perdon. mea culpa,  no habia declarado la variable en la que creo el cursoradapter. Un detalle que me tomo todo el dia.
 
Gracias,


De: Domingo Cuevas <dcue...@yahoo.es>
Para: mundovis...@googlegroups.com
Enviado: martes, 8 de septiembre, 2009 11:40:35
Asunto: [Mundo Visual FoxPro] CursorAdapter

Daniel Manuel López

unread,
Sep 8, 2009, 10:14:23 PM9/8/09
to Zorros verdaeros
Mi estimado e ilustre amigo, viendo tus sesudisimas conclusiones, hasta me dieron
ganas de aportarte una pequeña idea.
 
En un Sentencia SQL podrías incluir varias palabras de busqueda, ejemplo:
 
Estos campos son los que capturas en pantalla para buscar
campo1 = "Miguel de Cervantes y Saavedra"
campo2 = "Sancho"
Campo3 = "Panza"
Campo4= "Molinos"
 
Para cada base o tabla a buscar y si tiene varios campos a buscar
tendrás que programar la siguiente instrucción
 
Select File1.*;
   from File1;
   where atc(Campo1,CBusq1)>0 Or;   && Buscas campo1 en Campo de busqueda 1
            atc(Campo1,CBusq2)>0 Or;   && Buscas campo1 en Campo de busqueda 2
            atc(Campo1,CBusq3)>0 Or;   && Buscas campo1 en Campo de busqueda 3
            atc(Campo1,CBusq4)>0 Or;   && Buscas campo1 en Campo de busqueda 4
            atc(Campo2,CBusq1)>0 Or;   && Buscas campo2 en Campo de busqueda 1
            atc(Campo2,CBusq2)>0 Or;   && Buscas campo2 en Campo de busqueda 2
            atc(Campo2,CBusq3)>0 Or;   && Buscas campo2 en Campo de busqueda 3
            atc(Campo2,CBusq4)>0 Or;   && Buscas campo2 en Campo de busqueda 4
            atc(Campo3,CBusq1)>0 Or;   && Buscas campo3 en Campo de busqueda 1
            atc(Campo3,CBusq2)>0 Or;   && Buscas campo3 en Campo de busqueda 2
            atc(Campo3,CBusq3)>0 Or;   && Buscas campo3 en Campo de busqueda 3
            atc(Campo3,CBusq4)>0 Or;   && Buscas campo3 en Campo de busqueda 4
            atc(Campo4,CBusq1)>0 Or;   && Buscas campo4 en Campo de busqueda 1
            atc(Campo4,CBusq2)>0 Or;   && Buscas campo4 en Campo de busqueda 2
            atc(Campo4,CBusq3)>0 Or;   && Buscas campo4 en Campo de busqueda 3
            atc(Campo4,CBusq4)>0;       && Buscas campo4 en Campo de busqueda 4
    into Cursor Result1
 
Result1 contendrá el resultado de tu busqueda
y si hay más tablas debes programar para cada tabla y despues unir tus Resultados
y poder mostrarlos como desees.
 
Y digo SELECT porque es muy rapida con su tecnologia RUSHMORE,
y digo ATC() porque te busca una cadena dento de otra cadena, incluyendo campos MEMO,
además de no importarle si están en mayúsculas o minúsculas
 
En una Cintoteca con 750,000 registros en cada base, realizó ese tipo de busquedas,
y te sorprenderia ver la rapidez con que los muestra
 
Ojalá te sirva... Bai
Subject: [Mundo Visual FoxPro] Busqueda en Visual Foxpro Tipo Google Alguien lo ha hecho?
Date: Tue, 8 Sep 2009 14:58:51 +0000

Carlos Miguel FARIAS

unread,
Sep 9, 2009, 8:47:31 AM9/9/09
to mundovis...@googlegroups.com
Que google una sola tabla para las busquedas?
Hasta hace 4/5 años atras google, tenia indexadas mas de 8 mil millones (8gigas) de páginas, después dejo de informar porque la cosa se duplicaba al menos una vez al año.
Google tiene (según me comentaron) tal vez cientos de servidores, trabajando en cluster, asi que una tabla, hum....
En cuanto al modelo por mi propuesto, si se puede buscar por mas de una palabra, simplemente agregando condiciones OR en el WHERE.
Entiendo que dicha setencia select, debería ser compuesta al vuelo (o sea, al hacer el parsing de lo que se busca, armar un where con una condición por cada palabra buscada.
Además, para que voy a crear campo en el formulario por cada una de las palabras (no es lo que hace Google. Si con un solo cuadro de texto, le aplico la función alines (pasa cada palabra a un arreglo), puedo verificar el arreglo para eliminar palabras no significativos (articulos, preposiciones, etc.).
Ejemplo:
En el caso de que el usuario ingrese tres palabras
lnQ = ALINES( laPalabras, thisform.txtbuscar.value, .T., ' ' )
en lnQ tenes la cantidad de palabras, en cada elemento del arreglo, una palabra
Para tres palabras ingresadas, la consulta te queda...
 
SELECT cTabla, cClavePrimaria FROM Diccionario INTO CURSOR PreSeleccion
WHERE cPalabra = laPalabras[1] OR cPalabra = laPalabras[2] OR cPalabra = laPalabras[3]
 
Este cursor te da una lista de que tabla tenes que buscar y que clave primaria
 
Si usas varias palabras en un mismo registro, cada palabra a buscar tiene que consultar en cada campo y el where se hace enorme.
Además al cargar el diccionario, tenes que revisar varias columnas para ver si el registro ya no esta cargado.
Hace 15 años arme un sistema que hacia eso, y a pesar de correr en DOS (FoxDOS), sobre una base de 2 megabytes de texto (campos memo) tardaba algunos minutos reconustruir el diccionario completo.
Las busquedas eran rapidisimas.
El rushmore funciona bien con busquedas por igualdad, no por contenido, porque la busqueda por igualdad lo hace en el indice, en cambio por contenido, tiene que revisar el campo de datos ya en la tabla (y chau rushmore).
 
En la web tenes que buscar el tema, arboles de busqueda, arboles b. b+ y tries
 
Saludos: Miguel

magicboy

unread,
Sep 15, 2009, 9:04:56 AM9/15/09
to mundovis...@googlegroups.com
Buen Dia..
Tengo una Programa Para Busqueda como lo necesista. pero tengo k buscarlo escribeme  jonatha...@hotmail.com
 
 
gracias
Reply all
Reply to author
Forward
0 new messages