¿Cuál es la diferencia entre un índice invertido y un índice antiguo simple?


99

En ingeniería de software creamos índices todo el tiempo (por ejemplo, en bases de datos) pero también escucho a mucha gente hablar de índices invertidos. ¿Hay algo fundamentalmente diferente entre los dos? Suenan como lo mismo.



Para aclarar, estás preguntando: ¿qué hay de diferente en un índice normal ( en.wikipedia.org/wiki/Index_%28database%29 ) que desglosa una tabla en función de los datos que ya existen en esa tabla? ¿Es eso correcto?
jwheron

3
@guidoism Lo que nadie mencionó (aunque normalocity lo describe parcialmente con ejemplos y lovesh está bastante en el botón) es que los índices invertidos "invierten" los datos básicos para ser más eficientes (por ejemplo, intercambiar claves / datos para buscar desde una perspectiva diferente o ordenar alfabéticamente / numéricamente para permitir algoritmos de búsqueda rápidos), mientras que un índice estándar almacena los datos a medida que los encuentra. Las referencias "hacia atrás / adelante" y el significado literal de la palabra "invertir" no se aplican aquí, sino que se refieren a la inversión de datos para producir un formato eficiente específico para la tarea en cuestión.
TheManWithNoName

Respuestas:


216

Un uso común es "... para permitir búsquedas rápidas de texto completo".

Los dos tipos denotan direccionalidad . Uno lo lleva hacia adelante a través del índice y el otro lo lleva hacia atrás (el inverso) a través del índice. Eso es. No hay ningún misterio que descubrir aquí. De lo contrario, los dos tipos son idénticos, es solo una cuestión de qué información tiene y, como resultado, qué información está tratando de encontrar.

Para abordar su consulta, no creo que haya una forma de saber por qué el uso es el que es hoy. La única razón por la que es importante definir cuál es forwardy cuál es invertedes para que todos podamos tener una conversación sobre ellos, y todos sepan de qué dirección estamos hablando. Piense en los términos "izquierda" y "derecha": son relativos. Cuál es cuál no importa, excepto que todos deben estar de acuerdo sobre cuál es "izquierda" y cuál es "correcta" para que las palabras tengan significado. Si, como cultura, decidiéramos girar de izquierda a derecha, entonces tendrías el mismo problema al determinar qué es un "giro a la derecha" frente a un "giro a la izquierda", ya que el significado acordado había cambiado. Sin embargo, el nombre es arbitrario, sobre el significado.

En su comentario en el que pregunta, "por favor, no se limite a definir los términos", se está perdiendo el punto, y creo que se está obsesionando con la redacción cuando no hay absolutamente ninguna diferencia entre ellos.


Para beneficio de los futuros lectores, ahora proporcionaré varios ejemplos de índices "hacia adelante" e "invertidos":

Ejemplo 1: búsqueda web

Si está pensando que la inversa de un índice es algo así como inversa de una función en matemáticas , donde la inversa es una cosa especial que tiene una forma diferente, entonces estás equivocado: ese no es el caso aquí.

En un motor de búsqueda tienes una lista de documentos (páginas en sitios web), donde ingresas algunas palabras clave y obtienes resultados.

Un índice de avance (o simplemente un índice) es el lista de documentos y las palabras que aparecen en ellos. En el ejemplo de búsqueda web, Google rastrea la web, construye la lista de documentos y determina qué palabras aparecen en cada página.

El índice invertido es la lista de palabras. y los documentos en los que aparecen. En el ejemplo de búsqueda web, proporciona la lista de palabras (su consulta de búsqueda) y Google produce los documentos (enlaces de resultados de búsqueda).

Ambos son índices, es solo una cuestión de en qué dirección vas. El reenvío es de documentos-> a-> palabras, invertido es de palabras-> a-> documentos.

Ejemplo 2: DNS

Otro ejemplo es una búsqueda de DNS (que toma un nombre de host y devuelve una dirección IP) y una búsqueda inversa (que toma una dirección IP y le da el nombre de host).

Ejemplo 3: un libro

El índice al final de un libro es en realidad un índice invertido , como se define en los ejemplos anteriores: una lista de palabras y dónde encontrarlas en el libro. En un libro, la tabla de contenido es como un índice hacia adelante : es una lista de documentos (capítulos) que contiene el libro, excepto que en lugar de enumerar las palabras en esas secciones, la tabla de contenido solo da un nombre / descripción general de lo que es contenidos en esos documentos (capítulos).

Ejemplo 4: su teléfono celular

El índice de reenvío en su teléfono celular es su lista de contactos y qué números de teléfono (celular, casa, trabajo) están asociados con esos contactos. El índice invertido es lo que te permite ingresar manualmente un número de teléfono, y cuando presionas "marcar", ves el nombre de la persona, en lugar del número, porque tu teléfono tomó el número de teléfono y te encontró el contacto asociado con él.


11
Gracias por tu tiempo. pero tu respuesta aún no es informativa. Como mencioné en mi solicitud de recompensa, SÍ entiendo qué significan los términos involucrados y por qué surgen. Mi pregunta era: "¿por qué las personas que nombraron índices invertidos los llamaron invertidos cuando tenemos una larga tradición que los llama simplemente índices simples? Por ejemplo, los índices al final de los libros, como usted señala, en realidad están invertidos. Según la perspectiva histórica, los índices al final de los libros fueron anteriores a los índices web. Entonces, ¿por qué invertir la tradición? ". Supongo que fue solo una de esas cosas que acaba de suceder ...
Manav

1
"No creo que sea posible saber por qué sin realizar un examen histórico del uso de los términos". Hubiera esperado que alguien realizara un examen histórico de ese tipo y diera una respuesta. :-) Porque esto es lo opuesto al significado del lenguaje común de "índice" es sorprendente. (Una posible respuesta es que cuando se pensó por primera vez en la frase "índice invertido", la frase "índice" ya estaba siendo para algún "índice" wrt invertido "índice invertido", es decir, wrt invertido el significado real de "índice ". En ese caso, sería útil saber por qué el" índice "hacia adelante obtuvo el nombre extraño.)
ShreevatsaR

2
@jefflunt me preguntaba por qué debería usarse la indexación directa. Me refiero particularmente al ejemplo de búsqueda web aquí. Entonces, si google, como parte de la indexación hacia adelante, hace la lista de documentos <-> palabras en ellos , y finalmente usa la lista de palabras <-> lista de documentos en su búsqueda, ¿por qué la lista de documentos <-> palabras en ellos ? En otras palabras, mi pregunta es: uno no puede preguntarle a google qué palabras hay en una página en particular (documento) o principalmente va a preguntar dónde aparecen las palabras clave que está buscando en las páginas. Entonces, ¿por qué indexar hacia adelante?
quickbrownfox

1
Entonces, en el contexto de la base de datos relacional, ¿no hay un índice invertido? o esos índices son en realidad "índice invertido". Los problemas con los términos "agradables" en la literatura son la ignorancia / error / deliberación de algunos pioneros o cuerpos que inician acuerdos diferentes y parte de la comunidad sigue esa nomenclatura. Todos se confunden después de algún tiempo. Estoy seguro de que hay muchos términos en el software que originalmente estaban destinados a ser, digamos A, pero una comunidad diferente lo toma deliberadamente o por error como A 'o B, sintácticamente fuera de curso. Todavía confunde muchísimo a los nuevos aprendices.
nir

1
@Roylee: no he leído ese documento técnico. Creo que lo que estás preguntando es: "¿Actualizas el índice invertido cuando actualizas el índice de avance?" Si esa es tu pregunta, entonces la respuesta es sí.
jefflunt

26

Lo llamaron invertido solo porque ya existe un índice a plazo. Tomemos el ejemplo del motor de búsqueda, compuesto por dos partes: la primera parte es "rastreador y analizador web" que construye un índice de documento a palabra, la segunda parte es una base de datos de búsqueda que construye un índice de palabra a documento. Debido a que existe el primer índice, naturalmente llamamos al segundo índice como índice invertido.

Si nombra el TOC (Tabla de contenido) de un libro como índice, entonces debe llamar al índice al final del libro como "índice invertido". O, en el otro lado, puede llamar al TOC como índice invertido.


6
Esta debería ser la respuesta aceptada, ya que responde a la pregunta de por qué llamamos a un índice "invertido", incluso si es lo que todo el mundo piensa de un "índice normal". Un índice de árbol b de SQL almacena para cada palabra un puntero a todas las filas ("documentos") que lo contienen. Allí lo llamamos "índice". Pero en los motores de búsqueda de repente llamamos exactamente a este mismo procedimiento "índice invertido". No porque sea fundamentalmente diferente, sino porque primero creamos un "índice de avance" (texto dividido) y luego lo "invirtimos". Entonces, en general, el nombre "inverso" proviene del proceso de creación, no de la estructura final del índice.
Foo Bar

@xeranic gracias por las ideas. Pregunta rápida: ¿Es práctico eliminar entradas del archivo de índice de reenvío después de crear el índice invertido?
Roy Lee

3
Estoy de acuerdo con @FooBar. Esta respuesta debe elegirse como la respuesta correcta. Respondió por qué inventamos un nuevo término inverted index a pesar de que todos los índices normales de nuestra vida ya se utilizan como inverted.
Ryan Lyu

7

Por lo general, cuando se habla de índice, se refiere a algunos cálculos agregados o resultados almacenados de procedimientos que se han realizado para acelerar la aplicación (por ejemplo, MySQL u otro RDBMS Consulte los documentos de MySQL ). La indexación también puede estar relacionada con el almacenamiento en caché, etc.

El índice invertido crea un archivo con una estructura que está destinada principalmente a la búsqueda (de texto completo).

El índice invertido consta de dos archivos principales:

  • Vocabulario
  • Sucesos

En el vocabulario hay palabras comunes extraídas del texto (por supuesto, después de filtrar palabras de la lista negra como pronombres). El archivo de ocurrencias contiene la conexión entre palabras y documentos (word1 aparece en doc1 y doc2, no en doc3). Está representado en forma de matriz.

Proceso de indexación - índice invertido

En la imagen de arriba se muestra el proceso de creación de los dos archivos mencionados.

Si está más interesado en esta problemática, puedo recomendarle un gran libro escrito por Ricardo Yated - Modern Information Retrieval (Véalo en Amazon ) - sobre la página 200, creo.

Espero eso ayude :-)


Esta es una muy buena respuesta, ya que explica qué es realmente un índice invertido. Va más allá de la idea de indexación directa e indexación inversa, que es diferente del algoritmo que se utiliza para una capacidad de búsqueda que se habilita mediante la creación de un índice invertido.
AN6U5

6

la normalidad ya ha diferenciado maravillosamente entre un índice hacia adelante y un índice invertido, pero para la pregunta de por qué uno se llama índice hacia adelante y el otro índice invertido, tal vez es por eso que se llaman así ---

Tomando como ejemplo el rastreo y la indexación de un motor de búsqueda (o la creación de un índice para un libro), se puede construir un índice hacia adelante simultáneamente mientras rastrea las páginas web (o lee el libro) o avanza . Entonces, si tiene 10 páginas web para rastrear (o 10 capítulos en un libro), puede rastrear la primera página web (leer el primer capítulo) y luego hacer una lista de palabras que aparecen en la página web (palabras que aparecen en el capítulo) y continuar. este proceso para otras páginas web (otros capítulos), por lo que cuando haya rastreado las 10 páginas web (lea los 10 capítulos), su índice de avance estará completo con cada página web (capítulo) apuntando a una lista de palabras que contiene .

Pero para hacer un índice invertido tienes que rastrear las 10 páginas web (leer los 10 capítulos) y luego tomar cada palabra de cada lista de documentos y averiguar qué documentos contienen esa palabra. Así que esto es como retroceder una vez que haya rastreado las páginas web (lea los capítulos del libro) . Por eso se llama índice invertido.

Esta es solo mi especulación.


5

Hay muchos tipos de índices. Por ejemplo, B-tree, R-tree, hash ... Para diferentes propósitos, debemos elegir el índice correcto.

El índice invertido es especial. Índice invertido generalmente utilizado en motores de búsqueda de texto completo. Con el índice invertido podemos averiguar la ubicación de una palabra en un documento (o conjunto de documentos) lo más rápido posible. Piense en el límite de memoria y CPU, otro índice no puede terminar este trabajo.

Puede leer el documento lucene para más detalles. Es un motor de búsqueda de código abierto. http://lucene.apache.org/java/docs/index.html


3

El término "índice de palabras invertidas" se refiere al cambio en la relación de un solo documento que contiene muchas palabras, a cada palabra única que contiene (o identifica) una lista de muchos documentos. Esto consiste efectivamente en tomar una relación de uno a muchos (documentos a palabras) e invertirla (o invertirla) de modo que ahora exista una nueva relación de uno a muchos "invertida", que es cada palabra única relacionada con muchos. Documentos (es decir, todo lo que contenga esa palabra). Su origen es realmente así de simple, y el término "índice invertido" se usó para describir índices manuales del mismo tipo mucho antes de que existieran las computadoras y la indexación electrónica de alta velocidad (sí, lo admito, soy un programador viejo y geezer, casi lo suficientemente mayor para haber considerado a Grace Hopper una "dulce jovencita" edad apropiada para cortejar cuando COBOL era un nuevo idioma brillante). Por favor, no nos descarten todavía, ya que ocasionalmente podemos proporcionar un par de datos históricos útiles, y posiblemente incluso valiosos, cuando nuestra RAM personal todavía está funcionando, claro. [mueca]


2

en índices invertidos, tenemos la siguiente forma:

palabra1-> lista de documentos en los que aparece (orden ordenado)

palabra2-> lista de documentos en los que aparece (orden ordenado)

Es muy útil para el procesamiento de consultas de motores de búsqueda, ya que nos permite encontrar documentos en los que aparece la palabra.

Puede utilizar el aprendizaje automático supervisado para crear este índice invertido.


6
Eso me suena como un índice, ¿qué tiene de invertido?
guidoísmo

2
@guidoism Un índice invertido es la inversión de un índice forward. un índice de avance almacena una lista de palabras para cada documento. Por ejemplo, Doc-> w1, w2
Programador

Todavía no encuentro ninguna diferencia entre el índice Forward e Inverted (en términos de cómo funciona, deje el bit de nomenclatura). Tanto para mí, parece un índice que asigna un campo a un montón de identificadores de documentos. Así es como entendí cómo el oráculo btree (también denominado índice de avance) organiza los datos. No veo ninguna diferencia en los principios del índice invertido. Mapear un Doc -> w1, w2, w3 me parece una propuesta ineficiente en términos de búsqueda. Me pregunto por qué es esto en primer lugar. Eso me deja de vuelta al punto de partida. :-).
user1189332

@Programmer Pregunta rápida: ¿Es práctico eliminar entradas del archivo de índice de reenvío después de crear el índice invertido?
Roy Lee

0

Una diferencia más:

El manejo de actualizaciones con el índice invertido es costoso en comparación con el índice a plazo.

El índice de avance maneja las actualizaciones fácilmente reflejando los cambios solo en el índice del documento correspondiente, mientras que en el índice invertido, el mismo cambio tiene que reflejarse en múltiples posiciones en el índice invertido.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.