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,

Valorar la entrada
1 Puntos2 Puntos3 Puntos4 Puntos5 Puntos
(4 voto(s), 5,00 sobre 5)

Comentarios

  • Pablo
    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.

    Valora este comentario: (1 voto, media: 5 de 5)
  • vromero (Víctor)
    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

    Valora este comentario: (3 votos, media: 5 de 5)
  • antonio f. ortega
    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.

    Valora este comentario: (1 voto, media: 5 de 5)
  • Jasar
    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).

    Valora este comentario: (1 voto, media: 5 de 5)
  • vromero (Víctor)
    Agosto 6, 2008 - 10:21 #

    Hola Jasar,

    así es, muchas gracias por la puntualización.

    Un saludo

    Valora este comentario: (2 votos, media: 5 de 5)

Comentar

Cerrar
Enviar por Correo