Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | luca-grosso |
View: | 213 times |
Download: | 1 times |
MG4J – Managing GigaBytes for Java
Indicizzazione ed interrogazione di basi documentali
Ilaria Bordino
Yahoo! Research, Barcelona
• Contatto: Ilaria Bordino
[email protected]@dis.uniroma1.it
Personal home page: www.dis.uniroma1.it/~bordino
Home page del corso: http://www.cs.brown.edu/~aris/teaching/webir11/webir11.html
Home page delle esercitazioni: http://www.dis.uniroma1.it/~mele/teaching_20112012.html
Ricevimento: dott.ssa Ida Mele
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 2
Informazioni Generali
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 3
MG4J
• Tool sviluppato presso la facoltà di Scienze dell’Informazione dell’Università degli Studi di Milano.
• Disponibile gratuitamente
• Web Page: http://mg4j.dsi.unimi.it
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 4
MG4J
• Permette l’indicizzazione e l’interrogazione di collezioni di documenti di grandi dimensioni;
• INPUT: serie di documenti omogenei
• OUTPUT: indice invertito
• USO: Permette di effettuare semplici interrogazioni sulla collezione di documenti indicizzata
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 5
Il processo di indicizzazione in MG4J
• L’indicizzazione in MG4J si fonda sulla costruzione degli indici invertiti
• Una document factory elabora uno stream di byte e produce un documento, composto da campi testuali o virtuali
• Un campo testuale è una sequenza di parole che vengono trasfomate in termini indicizzabili da un term processor
• l’insieme di tutti I termini che appaiono nel corpo documentale costituisce il dizionario dei termini
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 6
Dizionario dei termini: esempio
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 7
Costruzione dei Batch
• Scansione di tutti I documenti ed estrazione delle occorrenze <t,d,p>
• Costruire la lista dei termini raccogliendo nuovi termini man mano che vengono trovati
• Disporre I termini in ordine alfabetico, rinumerando le occorrenze di conseguenza
• (Se richiesto) rinumerare i documenti e disporli in ordine di termine crescente
• Ordinare, almeno parzialmente, le occorrenze trovate per ordine di termine crescente
• Quando il numero dei documenti collezionati raggiunge una data soglia, creare un sottoindice contenente il batch corrente di occorrenze
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 8
Struttura dell’indice
• mycollection-{text,title}.terms: un file di testo contenente l’intero dizionario, un termine per riga, ordinato secondo l’indice– more mycollection-text.terms
• mycollection-{text,title}.frequencies: per ciascun termine, il numero di documenti in cui tale termine appare (codificato in -code)
• mycollection-{title,text}.sizes: contiene, per ciascun documento indicizzato, la corrispondente dimensione (=numero di parole) in - code.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 9
Struttura dell’indice (2)
• mycollection{text,title}.globcounts: per ciascun termine, viene memorizzato il numero di occorrenze in -code.
• mycollection{text,title}.offset: per ciascun termine, viene memorizzato l’offset in -code
• mycollection-{text,title}.batch<i>: quando la memoria e’ piena di termini, viene effettuata una copia codificata in -code in un file batch e viene iniziata una nuova lista. Alla fine del processo, i file di batch vengono uniti.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 10
Struttura dell’indice (3)
• mycollection{text,title}.stats: raccoglie alcune statistiche sull' indicizzazione
• mycollection{text,title}.index: l’indice invertito in -code.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 11
Struttura dell’indice (4)
• mycollection{text,title}.properties: contiene alcuni dati relativi al processo di indicizzazione:
• Documents: numero di documenti nella collection; • Terms: numero di termini indicizzati; • Occurrences: numero di parole nell’intera collection; • Batches: numero di batch file generati; • Maxdocsize: massima dimensione di un documento (parole);• termprocessor: il term processor (se presente) usato durante la
costruzione: ad esempio DowncaseTermProcessor; • Occsperbatch: massimo numero di occorrenze in ciascun batch; • Permutation: nome del file di premutazione usato.
– More mycollection-text.properties– ls –lh mycollection
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 12
Combinazione dei Batch
• L’indicizzazione produce un certo numero di sottoindici che debbono essere combinati in un singolo indice
• Il tempo necessario per combinare i sottoindici cresce in modo logaritmico con il loro numero
• MG4J supporta 3 diversi tipi di combinazione:
- Concatenazione
- Merge
- Paste
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 13
Combinazione dei batch: concatenazione
• Data una lista di indici, il nuovo indice viene costruito rinumerando i sottoindici nel modo seguente: al primo documento di ogni indice successivo al primo viene viene assegnato un nuovo indice pari al numero totale di documenti contenuti nei sottoindici precedenti. I documenti successivi vengono rinumerati conseguentemente (combinazione applicata per default)
• L’indice risultante è uguale a quello che si sarebbe ottenuto indicizzando la concatenazione delle sequenze di documenti per cui sono stati prodotti I vari sottoindici.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 14
Combinazione dei batch: Merge
• Si assume che ogni indice contenga un sottoinsieme separato di documenti, senza sovrapposizione di numeri, e si effettua un merge delle liste coerente con questa assunzione. Se uno stesso documento appare in due indici l’operazione viene interrotta
• Questa combinazione viene applicata ai batch quando i documenti sono stati rinumerati e ogni batch contiene numeri di documento potenzialmente non consecutivi.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 15
Combinazione dei batch: paste
• Si assume che ogni sottoindice indicizzi una parte di un documento, che può essere anche vuota. Per ogni termine e per ogni documento, si recuperano le posizioni del termine all’interno del documento, che vengono opportunamente rinumerate.
• L’indice risultante è uguale a quello che si sarebbe ottenuto applicando il comando Unix paste ai file di testo.
• Questa combinazione viene applicata ai documenti virtuali
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Interrogazione degli indici
• Una volta che abbiamo costruito gli indici, siamo pronti ad interrogarli usando un web server.
• Si può usare sia il tool da riga di comando che una interfaccia web
• Varie opzioni a disposizione:• Ad esempio si può chiedere di caricare l’indice in
memoria principale, oppure mettere in main memory solo la parte dell’indice usata più di frequente, come una sorta di cache.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 17
Interrogazioni semplici
• Ricerca delle occorrenze di una parola– EX: attorettore– EX: attrice
• AND: scrivendo piu’ termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate;– EX: claudia & pandolfi & pandolfi
• OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |);– EX: pandolfi | gerini | gerini
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 18
Interrogazioni semplici (2)
• NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !);– EX: claudia & !pandolfi & !pandolfi
• Parentesi: le parentesi sono usate per definire le priorita’ nella query
• EX: claudia & (pandolfi | gerini) & (pandolfi | gerini)
• FraseFrase: le parole messe fra “ “ appaiono consecutivamente nelle documenti ritornati– EX: “invia questa” | “ricerca avanzata”
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 19
Interrogazioni con asterisco (wildcard)
• Prossimita’:Prossimita’: si puo` limitare la distanza massima fra si puo` limitare la distanza massima fra un insieme di paroleun insieme di parole– EX: (claudia attrice)~3
• AsteristicoAsteristico: * serve per specificare una qualunque sequenza di caratteri– EX: att*
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Interrogazioni
• Index specifiers: premettere al testo della query il nome di un indice seguito da “:” per limitare la ricerca all’indice specificato.
Esempio: title:Gerini• Range query: nel caso di indici contenenti payload
è possibile effettuare interrogazioni di range utilizzando la sintassi [ .. ]
• Esempio: Assumendo l’esistenza di un campo data
[ 20/2/2007 .. 23/2/2007 ] :
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 21
Interrogazioni complesse
• MG4J fornisce sofisticati meccanismi di tuning delle query.
• Gli scorer permettono di riordinare i documenti ottenuti in risposta ad una interrogazione in base a un dato criterio.
• Per sfruttare queste possibilità occorre usare l’interfaccia a linea di comando.
• $ --- Mostra le opzioni disponibili• $mode -- Seleziona la modalità di presentazione del
risultato
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 22
Gestione dei campi virtuali
• In alcuni casi il contenuto di un documento fa riferimento ad altri documenti esistenti nella collezione.
• Esempio: ancore in un documento HTML.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 23
Campi virtuali e frammenti virtuali
• Ogni document factory trasforma sequenze di byte in documenti composti da campi di tipo testuale o virtuale.
• Un campo testuale è una porzione di testo composta da parole; le parole sono gli atomi del sistema di indicizzazione di MG4J.
• Un campo virtuale contiene porzioni di testo che fanno riferimento ad altri documenti (possibilmente esistenti nella collezione).
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 24
Campi virtuali e frammenti virtuali (2)
• Un campo virtuale è una lista di coppie formate da un segmento di testo (frammento virtuale) e da una stringa (document spec) che rappresenta il documento a cui il frammento fa riferimento.
• Es. HtmlDocumentFactory produce documenti HTML composti da 3 campi, due testuali (text e title) e uno virtuale (anchor)
• Il campo anchor contiene tutte le ancore presenti in un documento: è una lista di coppie <frammento virtuale, document spec> in cui il frammento è dato dal testo dell’ancora, mentre la document spec è la URL specificata come valore dell’attributo HREF.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 25
Document Resolver
• Una document factory non si occupa di mappare le document spec in veri e propri riferimenti a documenti esistenti nella collezione.
• Questo compito viene svolto da un document resolver, che stabilisce se ed a quale documento esistente nella collezione ogni document spec corrisponde.
• I campi virtuali vengono indicizzati da MG4J solo in seguito ad esplicita richiesta dell’utente.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 26
Indicizzazione dei campi virtuali
• Come primo passo occorre costruire un document resolver che sia in grado di tradurre le document spec prodotte per il campo anchor di ogni documento HTML in riferimenti a documenti della collezione.
• URLMPHVirtualDocumentResolver trasforma le URL in riferimenti a documenti.
• Il comando
java –Xmx1G it.unimi.dsi.mg4j.tool.ScanMetadata –S actors.collection –u actors.urls
permette di costruire l’elenco delle URL dei documenti che appartengono alla collezione.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 27
Testi virtuali
• Concettualmente, tutti I frammenti virtuali che fanno riferimento ad un dato documento producono un unico testo, detto testo virtuale, che viene indicizzato come parte del documento suddetto.
• Il testo virtuale viene costruito concatenando I frammenti virtuali relativi alle diverse ancore.
• Possibilità di falsi positivi: ad es, query congiuntive potrebbero restituire documenti che contengono entrambe le parole nelle loro ancore, anche se non le contengono nella stessa ancora.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 28
Gap virtuali
• Il gap virtuale è un intero positivo che rappresenta lo spazio virtuale lasciato tra due frammenti virtuali distinti.
• I gap virtuali possono essere sfruttati per aggirare il problema dei falsi positivi: ad es, la query
anchor: (buffer AND long) ~64
solo i documenti che contengono entrambe le parole nella stessa ancora appariranno nel risultato.
Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 29
Indici basati su payload
• MG4J fornisce un tipo speciale di indice, detto indice basato su payload, che viene usato per memorizzare i metadati relativi ad un documento (date, interi…)
• Ogni posting ha un payload, cioè un dato relativo al documento a cui il posting fa riferimento.
Performance: Indexing Time
• MG4J supporta una costruzione dell’indice flessibile; possibilità di scegliere differenti codifiche.
• Codici non parametrici generalmente più veloci di quelli parametrici;
• Scartare ciò di cui non si ha bisogno: l’indice costruito per default contiene tutte le informazioni
• Aggiungere skip pointers (non previsti per default).
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Performance: Setup Time
• Possibilità di migliorare le performance nella gestione delle risposte alle interrogazioni.
• Un indice può essere
- letto dal disco
- mappato in memoria
- caricato direttamente in memoria principale
All’aumento di utilizzo della memoria principale corrisponde un aumento di velocità nel rispondere alle query.
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Clustering
• MG4J supporta la combinazione di indici in cluster.
• Esempio: indicizzare separatamente due sottoinsiemi di documenti.
• Combinare i due sottoindici per ottenere un nuovo indice.
• Alternativa: clustering basato su concatenazione.• Un cluster permette di usare un insieme di indici
locali come un unico indice globale.
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Cluster documentali
• Ogni documento dell’indice globale appare esattamente una volta in ogni indice locale.
• Scenario di utilizzo: mantenere in un indice separato un insieme di documenti con elevato rank statico
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Cluster lessicali
• Ogni termine dell’indice globale appare esattamente una volta in ogni indice locale.
• Utilizzo: caricare in main memory le liste invertite
dei termini che appaiono più frequentemente nelle query.
Ilaria BordinoMG4J -- Managing GigaBytes for Java
Partizionamento
• Suddivisione delle liste invertite dell’indice in base a qualche criterio.
• Varie possibilità:
- Partizionamento documentale
- Partizionamento lessicale
- Utilizzo di strategie di partizionamento personalizzate.
Ilaria BordinoMG4J -- Managing GigaBytes for Java