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
Ho anche una domanda per te: in questa implementazione proprietaria di motore di ricerca come hai risolto il problema di trascurare le parti "spurie" della parola chiave immessa dall'utente? In altre parole se l'utente inserisce come chiave di ricerca "il banco" o "della sedia" presumo che tu eviti di pprodurre risultati che contengono solo "il" o "della", se si come fai? Usi un file in cui memorizzi tutte le parole da trascurare nella ricerca? Trascuri parole con lunghezza inferiore ad un tot? Oppure altro? Grazie