Originariamente inviato da eumene
Ho realizzato un motore di ricerca interno ad un portale in modo abbastanza generico ed espandibile.
Prima domanda da porti, però, è la seguente: quanto potere hai rispetto la macchina che ospiterà l'application.
Ti spiego. Il sistema che ho realizzato prevede
[list=1][*]una parte di front-end composta da una form di ricerca, una Servlet che legge una tabella del DB e riempie una Collection di esito della ricerca ed un template che cicla sulla collectio e mostra i risultati[*]uno spider vero e proprio. Un deamon da portare sulla macchina e che naviga il sito a periodi prestabiliti (tipo ogni giorno) ed indicizza pagine, documenti word e pdf nella tabella del db.[/list=1]
Lo Spider ha questa logica:
Partendo da una pagina data in input, magari mediante file di configurazione, genera per ogni link trovato (quindi anche per la pagina iniziale) un Oggetto che implementa l'interfaccia Reader.
I metodi del Reader sono principalmente:
[list=1][*]getUrl(): ritorna il link che raggiunge il nodo[*]getPage(): ritorna il contenuto della pagina (o del file)[*]getLinks(): ritorna la lista di link raggiungibili da detto Reader[*]getFather(): ritorna il link al Reader padre[*]getDeep(): ritorna la distanza minima tra la pagina iniziale (sorgente) e il Reader[/list=1]
E' chiaro che per ogni estensione gestita potrai generare un Reader ad Hoc (JSPReader, HTMLReader, DOCReader, PDFReader, ecc...) in cui implementare i vari metodi (DOCReader, PDFReader torneranno null sul getLinks(), HTMLReader ritornerà solo i link interni al sito e il solo contenuto del tag body, ecc...)
Occorre allora una FactoryReader che lo Spider interroga, passando il link, e che genera l'apposito Reader.
Lo Spider naviga quindi il sito, utilizzando la classe java.net.URL e java.net.HTTPConnection, secondo un algoritmo di visita dei grafi.
Il più semplice da implementare, nonchè il migliore per la problematica affrontata, è il BFS (Visita in ampiezza)
Spero di averti dato un buon input e spero che molti partecipino al topic, ne potrebbe nascere un buon articolo.
Alla prossima