miércoles, 16 de abril de 2008

¿Tiene sentido indexar por pares (atributo, valor) una base de datos relacional ?

En este artículo se defiende la tésis de la utilidad que como complemento a un gestor de base de datos relacional de un motor de indexación, en el que los token de búsqueda son pares (atributo, valor) y los objetos búscados son los registros de la base de datos.

Por simplicidad, supongamos que tenemos una única tabla, por ejemplo clientes, que contiene N registros, con M atributos o campos por registro. Los objetos que jugarán el papel que en los sistemas de búsqueda de información tradicional corresponde a los documentos, en este caso se corresponderán con registros de la tabla. Los "tokens" por los que se indexan los elementos serán los pares (atributo, valor). El equivalente a una consulta de texto de redacción libre, para este caso, es un conjunto de pares (atributo, valor), que pude considerarse como un patrón de búsqueda de registros de la tabla.

Dada una consulta, por ejemplo (Provincia=Madrid, Apellidos="Pérez Gómez", Moroso=No), el sistema constuirá el vector de tokens, de manera análoga al modelo TF-IDF de la teoría vectorial de términos, y recuperará los registros que más se asemejen a dicho patrón, utilizando como medida de semejanza vectorial la medida COSIM (producto escalar).

En http://en.wikipedia.org/wiki/Tf%E2%80%93idf, puede encontrase una introducción a los conceptos de la teoría vectorial de términos. Lo aquí expuesto es una generalización que no exige desarrollos ni aplicaciones específicas. Podría utilizarse cualquier sistema de recuperación de la información. Para ello bastaría seguir estos pasos:
  1. Generar un documento por cada registro de cada tabla de la base de datos a indexar.
  2. Por cada tabla y para cada registro, generar un "documento" en el que las "palabras" son la concatenación del nombre de tabla, con el nombre del campo seguido del valor, concatenando los elementos con el carácter "_", y sustituyendo los espacios en blanco por |
  3. Lo que resta es cargar los documentos (confiando que el tokenizador del motor no suprima las "palabras" generadas en el punto 2 como términos descriptores de cada registro. Como clave o URL del documento se pondrá el valor de la clave del registro en la base de datos.
  4. En la consulta, bastaría con poner los tokens por los que queremos buscar.
Esta es una primera aproximación que puede dar idea de la utilidad. Para incorporarlo en aplicaciones de usuario final, habría que cuidar el interfaz para facilitar la construcción de las "consultas".

Finalmente, cabe pensar en múltiples mejoras. Por ejemplo, añadir como términos al documento descriptivo de cada registro, las palabras encontradas dentro de los valores de los campos con contenido texto.

Cualquier comentario, opinión, crítica, etc..., es bienvenida.

No hay comentarios: