Indicizzazione intero Web
Per fare il crawling di tutto il web o anche di una sua piccola percentuale, sarebbero necessari cluster in funzione per varie settimane e un’ingente disponibilità di hardware, tuttavia il meccanismo che Nutch mette a disposizione è di semplice utilizzo e si può applicare anche a domini di alcune decine di migliaia di pagine.
Innanzitutto, una breve descrizione dei file creati da Nutch; ci sono due tipi di strutture dati:
· db è il database contenente le informazioni sulle pagine visitate dal crawler e sui link.
· segments mantiene le pagine scaricate e indicizzate ed è composto da altre entità.
fetchlist:contiene le Url che dovranno essere prelevate.
fetcher: è un insieme di file con le pagine scaricate.
index: è l’indice in formato Lucene.
Questa struttura è quella creata durante il processo di crawl, precedentemente visto, che con il metodo per l’intero web dovrà essere costituita passo dopo passo.
- Creare le directory db/, segments/ e il database vuoto:
$ mkdir segments
$ mkdir db
$ $NUTCH_HOME/bin/nutch admin db create
- Inserire nel db le URL da scaricare, passando al comando inject un file di testo oppure un file DMOZ (contenente URL suddivise in categorie); tali URL devono rispettare regole simili a quelle viste precedentemente che si trovano nel file $NUTCH_HOME/conf/regex-urlfilter.txt:
$ $NUTCH_HOME/bin/nutch inject db –urlfile url
- Con le informazioni inserite nel db, generare la lista delle pagine da scaricare (fetchlist):
$ $NUTCH_HOME/bin/nutch generate db segments
- In seguito, scaricare le pagine e aggiornare il database con tali informazioni; è utile dichiarare una variabile d’ambiente seg1 con il nome della sottodirectory di segments creata dalla generate:
$ seg1=`ls -d segments/2* | tail -1`
$ $NUTCH_HOME/bin/nutch fetch $seg1
$ $NUTCH_HOME/bin/nutch updatedb db $seg1
- Per continuare in profondità il crawling, Nutch inserisce un meccanismo molto funzionale di analisi dei link finora acceduti; praticamente con il comando analyze vengono ordinati i successivi link da prelevare in base alla loro importanza, intesa come numero di link in ingresso in rapporto a quelli in uscita (tipo PageRank):
$ $NUTCH_HOME/bin/nutch analyze db 3
Generare la fetchlist come al passo 3), ma con la selezione di un sottoinsieme di URL, ordinate dal precedente processo di analisi.
$ $NUTCH_HOME/bin/nutch generate db segments -topN 20
Scaricare nuovamente le pagine e aggiornare il database:
$ seg2=`ls -d segments/2* | tail -1`
$ $NUTCH_HOME/bin/nutch fetch $seg2
$ $NUTCH_HOME/bin/nutch updatedb db $seg2
Ripetere il passo 5) tante volte, in base alla profondità che si vuole dare allo spidering. Per ogni iterazione si deve dichiarare una nuova variabile d’ambiente.
- Dopodiché costruire l’indice, ripetendo per ogni variabile d’ambiente dichiarata (contenente una sottodirectory di segments):
$ $NUTCH_HOME/bin/nutch index $seg1
….
$$NUTCH_HOME/bin/nutch index $segN
- Infine, Nutch ha un ottimo meccanismo d’eliminazione dei duplicati utilizzando la funzione hash MD5 per ogni URL; in altre parole, quelle che creano uno stesso risultato dopo l’applicazione di tale funzione sono pagine duplicate.
$ $NUTCH_HOME/bin/nutch dedup segments duplicati.tmp.