Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/08/2008, 19:33
Avatar de mij
mij
 
Fecha de Ingreso: enero-2007
Mensajes: 70
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: Indice inverso

Creo que no se me ha entendido bién.
Normalmente un índice ocupa un tamaño sustancialmente menor que el texto indexado (http://cat.inist.fr/?aModele=afficheN&cpsidt=15079715). No estoy comparando el tamaño de un texto en plano con el de un texto metido en una base de datos, sino el de un texto en plano con el de su índice (inverso, en este caso). Creo que ahi estaba la confusión.

Por ejemplo usando simplemente una estructura tipo tabla hash con listas enlazada, en la que a cada palabra le corresponda una lista enlazada con sus ocurrencias, ej:

La palabra 0 aparece en el texto 1 en la posición 2
0->{1->{2}}
La palabra 1 aparece en el texto 0 en las posiciones 3 y 4, y en el texto 5 en la posición 1
1->{0->{3,4} ; 5->{1}}

Aqui el primer numero de cada fila seria el hash de la palabra en cuestión. Asociada a ella hay una lista de "id" de cada documento donde aparece dicha palabra, y para cada id de documento una lista de posiciones en las que aparece la palabra en dicho documento.
Segun este esquema, insertar una palabra en el índice necesita, si usamos los tipos de dato del ejemplo anterior: 3 bytes para el "id" de la palabra, otros 3 para la id del documento y 2 para la posición de la palabra en el documento (total 8 bytes). Ahora bién, si esa misma palabra aparece en otro documento, solo necesitaría 5 bytes (igual que el texto plano), ya que no hay que repetir la informacion "id de la palabra". Análogamente, si una palabra se repite en un mismo documento, solo necesitamos 2 bytes adicionales para describirla (menos de la mitad del texto plano). Si añadimos una lista de stopwords, el resultado es que el índice asi construido ocupa bastante menos que el texto indexado.

Me preguntaba si MySQL hace esto mismo: obviar la información repetida para ahorrar espacio en disco.

El proyecto (gracias por interesarte!! ) era personal, hasta que recientemente una empresa me contrató para desarrollarlo (aunque sea por un sueldo de becario...) . Consiste en un buscador de textos científicos, aunque la parte interesante es que los cataloga automáticamente usando ontolgias.
En cuanto a lo del motor de búsqueda, no intento "adaptar" nada (o eso creo), usar indices inversos en bases de datos relacionados es una práctica standart, usado por todos los motores de busqueda que usan mysql que conozco (Sphider, nogoSearch, TSEP, PHPDig, iSearch y Sphinx)
Un saludo!