Potencia desapercibida: El Ãndice por trozos
- Publicado por [N4] vromero.velneo
- Desarrolladores, Velneo
Velneo tiene varias caracterÃsticas que impresionan por su potencia y velocidad, pero personalmente una de las que más me llama la atención y que suele pasar desapercibida, es el Ãndice por “trozos”. El motivo es simple, podemos realizar búsquedas de trozos de palabras en enormes cantidades de texto a una velocidad casi instantánea, y nos preguntamos: ¿cómo es posible?
El algoritmo de funcionamiento de este tipo de Ãndice no es trivial, y tampoco entraremos en profundidad en ello, pero si comentaremos algún pormenor de este tipo de Ãndice para que entendáis en qué se basa.
Una caracterÃstica básica es: ¿qué debo indexar en este Ãndice? Como su nombre indica, indexaremos trozos, pero ¿de qué tamaño?. Puesto que queremos encontrar los textos siempre con la menor información y precisión por parte del usuario para facilitarle la tarea, hemos de pensar que esos trozos deben ser lo más pequeños posible, sin que por otro lado, provoque efectos colaterales negativos tales como un tamaño del fichero de Ãndice demasiado grande, o como un número de resultados excesivo que dificulte encontrar el texto buscado entre los resultados obtenidos. Teniendo en cuenta todo esto, el tamaño que se ha considerado más óptimo para esto es de 3 caracteres.
¿Que quiere decir que indexamos 3 caracteres? es simple, la palabra “Velneo” podrá ser encontrada escribiendo 3 de sus letras, de modo que si el usuario escribe “lne” el Ãndice por trozos resolverÃa que la palabra “Velneo” debe ser devuelta en esa búsqueda. Este tipo de indexación se realizarÃa sobre todas las palabras de todos los campos que formen parte del Ãndice por trozos de la tabla de nuestra aplicación.
Pero os podéis preguntar: ¿y cuando busco la palabra “Hola”, cómo la puedo encontrar si se están guardando trozos de 3 letras, y no de 4 como la palabra “Hola”? La respuesta es fácil, Velneo buscará aplicando un algoritmo avanzado de búsqueda, y devolverá aquellos registros en los que encuentre la palabra “Hola” o registros cuyo contenido se aproxime a dicha palabra. De hecho, con “Hola” nos devolverÃa un registro con la frase “Holita vecino, tengo una caracola”, que como podemos ver, no tiene la palabra “Hola”, pero si partes de ella “Hol” en “Holita” y “ola” en “caracola”. Esta búsqueda inteligente, lejos de ser un problema, es una caracterÃstica avanzada que hemos conseguido implementar en este tipo de Ãndices para ampliar los resultados con textos similares que pueden ser de nuestro interés.
Este modo de funcionamiento, junto con el algoritmo interno del Ãndice y la optimización de información, hacen que este tipo de Ãndice tenga una velocidad impecable en búsquedas en tablas con millones de registros, una gran utilidad y sencillez y un tamaño de fichero mÃnimo, pues optimiza al máximo la indexación de trozos ya indexados, convirtiéndola en una herramienta de gran potencia, muy usada en las aplicaciones de Velneo.
Etiquetas: base de datos, programación








Agosto 5, 2008 - 12:47 #
Buenas.
Ojala hubierais escrito esto antes
, hace 1 semana en una aplicación Web basada en Velneo que estaba desarrollando, usaba una busqueda por trozos, y en la búsqueda yo escribia la palabra “Pala” y me devolvia los registros que contenian “Pala”, pero también los que tenian la palabra “Paleta”, claro yo creia que era un fallo mio, y me volvà loco buscando y buscando, finalmente lo deje ya que no corria mucha prisa.
Y ahora entiendo que el indice por trozos es que funciona asÃ.
Un saludo.
Agosto 5, 2008 - 13:43 #
Hola Pablo,
efectivamente las búsquedas por trozos pueden tener ese comportamiento. A veces se tiene tendencia a usar el Ãndice por trozos, incluso cuando en realidad queremos buscar una palabra y deseamos un resultado exacto. En estos casos, será un Ãndice por palabras y no por trozos lo más apropiado.
En el ejemplo que comentas creo que no es posible que buscando “Pala” te devuelva “Paleta”, es probable que hubiese algún texto más en el registro que no recuerdes. No obstante, como dije en el artÃculo, es normal obtener resultados no exactos a nuestra búsqueda, pero que pueden ser de interés para el usuario, asà que no sigas buscando el origen del problema, pues es correcto asÃ
.
Un saludo
Agosto 5, 2008 - 17:56 #
Este tipo de indices existe desde la epoca de clipper, se vendia en una librerÃa separada que se llamo sixdriver, luego evoluciono a Apolo y hoy por hoy se puede encontrar en xHarbour , con codigo fuente open source.
Esto lo pongo a manera informativa, para que conozcais que existen otras herramientas de buena calidad y open source.
Saludos.
Agosto 6, 2008 - 01:31 #
Potencia sÃ, desapercibida para nada!! Fue una de las primeras caracterÃsticas (de las muchas) que me hizo decir simplemente “joder con el velázquez” (perdón por la expresión).
Comentarios aparte, creo que el post lo deja todo claro.
Un apunte sin importancia: Este tipo de Ãndices no se resuelven cuando se usan directamente desde un “cargar lista” dentro de un proceso. Hemos de usarlos siempre mediante localizadores o búsquedas (al menos esa es mi experiencia).
Agosto 6, 2008 - 10:21 #
Hola Jasar,
asà es, muchas gracias por la puntualización.
Un saludo