Nell'ingegneria del software creiamo indici tutto il tempo (ad esempio, nei database) ma sento anche molte persone parlare di indici invertiti. C'è qualcosa di fondamentalmente diverso tra i due? Sembrano la stessa cosa.
Nell'ingegneria del software creiamo indici tutto il tempo (ad esempio, nei database) ma sento anche molte persone parlare di indici invertiti. C'è qualcosa di fondamentalmente diverso tra i due? Sembrano la stessa cosa.
Risposte:
Un uso comune è "... per consentire una rapida ricerca full-text".
I due tipi denotano direzionalità . Uno ti porta avanti attraverso l'indice e l'altro ti porta indietro (l'inverso) attraverso l'indice. Questo è tutto. Non c'è mistero da scoprire qui. In caso contrario, i due tipi sono identici, è solo una questione di quali informazioni hai , e di conseguenza le informazioni che si sta cercando di trovare.
Per rispondere alla tua domanda, non credo che ci sia effettivamente un modo per sapere perché l'uso è quello che è oggi. L'unico motivo per cui è importante definire quale è forward
e quale è inverted
è in modo che tutti possiamo avere una conversazione su di loro e tutti sanno di quale direzione stiamo parlando. Pensa ai termini "sinistra" e "destra": sono relativi. Il che non ha importanza, tranne per il fatto che tutti devono essere d'accordo su quale sia "sinistra" e quale "destra" affinché le parole abbiano un significato. Se, come cultura, decidessimo di girare a sinistra ea destra, allora avresti lo stesso problema a capire cosa sia una "svolta a destra" rispetto a una "svolta a sinistra" poiché il significato concordato è cambiato. Tuttavia, la denominazione è arbitraria, sul significato.
Nel tuo commento in cui chiedi "per favore, non limitarti a definire i termini", ti manca il punto e penso che ti stia solo bloccando sulla formulazione quando non c'è assolutamente alcuna differenza tra loro.
A beneficio dei futuri lettori, fornirò ora diversi esempi di indici "diretti" e "invertiti":
Se stai pensando che l'inverso di un indice è qualcosa come l' inverso di una funzione in matematica , dove l'inverso è una cosa speciale che ha una forma diversa, allora ti sbagli: non è così qui.
In un motore di ricerca hai un elenco di documenti (pagine su siti web), dove inserisci alcune parole chiave e ottieni risultati.
Un indice in avanti (o solo un indice) è l' elenco dei documenti e le parole che compaiono in essi. Nell'esempio di ricerca sul Web, Google esegue la scansione del Web, creando l'elenco di documenti e individuando quali parole compaiono in ciascuna pagina.
L' indice invertito è l' elenco delle parole e dei documenti in cui compaiono. Nell'esempio di ricerca sul Web, fornisci l'elenco di parole (la tua query di ricerca) e Google produce i documenti (link dei risultati di ricerca).
Sono entrambi indici: è solo questione di quale direzione stai andando. Avanti è da documenti-> a-> parole, invertito è da parole-> a-> documenti.
Un altro esempio è una ricerca DNS (che prende un nome host e restituisce un indirizzo IP) e una ricerca inversa (che prende un indirizzo IP e ti dà il nome host).
L'indice sul retro di un libro è in realtà un indice invertito , come definito dagli esempi sopra: un elenco di parole e dove trovarle nel libro. In un libro, il sommario è come un indice diretto : è un elenco di documenti (capitoli) che il libro contiene, tranne che invece di elencare le parole in quelle sezioni, il sommario fornisce solo un nome / descrizione generale di ciò che contenuti in quei documenti (capitoli).
L' indice di inoltro nel telefono cellulare è l'elenco dei contatti e i numeri di telefono (cellulare, casa, lavoro) sono associati a tali contatti. L' indice invertito è ciò che ti consente di inserire manualmente un numero di telefono, e quando premi "componi" vedi il nome della persona, piuttosto che il numero, perché il tuo telefono ha preso il numero di telefono e ha trovato il contatto associato ad esso.
L'hanno chiamato invertito solo perché esiste già un indice forward. Prendiamo l'esempio del motore di ricerca, composto da due parti: la prima parte è "web crawler e parser" che costruisce un indice da documento a parola, la seconda parte è database di ricerca che costruisce un indice da parola a documento. Poiché esiste il primo indice, chiamiamo naturalmente il secondo indice come indice invertito.
Se assegni l'indice al TOC (Table of Content) di un libro, devi chiamare l'indice alla fine del libro come "indice invertito". Oppure, dall'altra parte, puoi chiamare il TOC come indice invertito.
inverted index
anche se tutti gli indici normali nella nostra vita sono già usati come inverted
.
tipicamente quando si parla di indice, si intendono alcuni calcoli aggiunti o risultati memorizzati di procedure che sono state fatte per velocizzare l'applicazione (es. MySQL o altro RDBMS Consultare MySQL nella documentazione ). L'indicizzazione può anche essere correlata alla memorizzazione nella cache, ecc.
L'indice invertito crea file con una struttura destinata principalmente alla ricerca (full-text).
L'indice invertito è costituito da due file principali:
Nel vocabolario sono parole comuni estratte dal testo (ovviamente dopo aver filtrato le parole della lista nera come i pronomi). Il file delle occorrenze contiene la connessione tra parole e documenti (word1 appare in doc1 e doc2, non in doc3). È rappresentato in una forma di matrice.
Nell'immagine sopra è mostrato il processo di creazione dei due file citati.
Se sei ulteriormente interessato a questa problematica posso consigliarti un ottimo libro scritto da Ricardo Yated - Modern Information Retrieval ( Vedi su Amazon ) - a pagina 200 credo.
Spero che sia d'aiuto :-)
la normalità ha già differenziato meravigliosamente tra un indice forward e un indice invertito, ma per la domanda sul perché uno sia chiamato indice forward e l'altro indice invertito, forse è per questo che sono chiamati in questo modo ---
Prendendo ad esempio la scansione e l'indicizzazione dei motori di ricerca (o la creazione di un indice per un libro), è possibile creare un indice in avanti contemporaneamente mentre si esegue la scansione delle pagine Web (o si legge il libro) o si procede . Quindi, se hai 10 pagine web da scansionare (o 10 capitoli in un libro) puoi scansionare la prima pagina web (leggi il primo capitolo) e poi fare un elenco di parole che appaiono nella pagina web (parole che appaiono nel capitolo) e continuare questo processo per altre pagine web (altri capitoli) così quando hai scansionato tutte le 10 pagine web (leggi tutti i 10 capitoli) il tuo indice di andata è completo con ogni pagina web (capitolo) che punta a un elenco di parole che contiene .
Ma per creare un indice invertito devi eseguire la scansione di tutte le 10 pagine web (leggi i 10 capitoli) e quindi prendere ogni parola da ogni elenco di documenti e capire quali documenti contengono quella parola. Quindi è come tornare indietro dopo aver scansionato le pagine web (leggere i capitoli del libro) . Quindi è chiamato indice invertito.
Questa è solo una mia speculazione.
Esistono molti tipi di indice. Ad esempio, B-tree, R-tree, hash ... Per scopi diversi, dobbiamo scegliere l'indice corretto.
L'indice invertito è speciale. Indice invertito solitamente utilizzato nel motore di ricerca full text. Usa l'indice invertito per trovare la posizione di una parola in un documento (o in un insieme di documenti) il più velocemente possibile. Pensa al limite di memoria e CPU, altri indici non possono finire questo lavoro.
Puoi leggere il documento Lucene per maggiori dettagli. È un motore di ricerca open source. http://lucene.apache.org/java/docs/index.html
Il termine "Indice di parole invertite" si riferisce al cambiamento nella relazione di un singolo documento contenente molte parole, a ciascuna parola univoca contenente (o che identifica) un elenco di molti documenti. Questo significa effettivamente prendere una relazione uno-a-molti (Docs to Words) e invertirla (o invertirla) in modo tale che ora esista una nuova relazione uno-a-molti "invertita", che è ciascuna parola unica relativa a molti- Documenti (cioè, tutto ciò che contiene quella parola). La sua origine è davvero così semplice, e il termine "indice invertito" era usato per descrivere indici manuali dello stesso tipo molto prima che esistessero i computer e l'indicizzazione elettronica ad alta velocità (sì, è vero, sono un vecchio programmatore bislacco, quasi abbastanza grande da aver considerato Grace Hopper una "dolce signorina" età appropriata per corteggiare quando COBOL era un nuovo linguaggio brillante). Per favore, non scartare ancora noi geezers, poiché occasionalmente possiamo fornire uno o due bit storici utili, e forse anche preziosi, quando la nostra RAM personale è ancora funzionante, cioè. [sorriso]
negli indici invertiti, abbiamo la seguente forma:
word1-> elenco di documenti in cui si trova (ordine ordinato)
word2-> elenco di documenti in cui si trova (ordine ordinato)
È molto utile per l'elaborazione delle query dei motori di ricerca in quanto ci consente di trovare documenti in cui si trova la parola.
È possibile utilizzare l'apprendimento della macchina supervisionato per costruire questo indice invertito.
Un'altra differenza:
La gestione degli aggiornamenti con l'indice invertito è costosa rispetto all'indice forward.
L'indice diretto gestisce facilmente gli aggiornamenti riflettendo le modifiche solo nell'indice del documento corrispondente, mentre nell'indice invertito la stessa modifica deve riflettersi in più posizioni sull'indice invertito.