Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [j2ee] motore ricerca interno

    Ciao a tutti,
    ho bisogno di qualche consiglio da chi ha già avuto modo di implementare un motore di ricerca interno ad un sito interno sviluppato secondo J2EE su Tomcat.

    Non riesco a trovare una soluzione o componente che faccia la ricerca su pagine jsp.
    Qualcuno ha dei consigli??
    Grazie

  2. #2
    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

  3. #3
    grazie per la tua partecipazione.
    Allora, al momento l'applicazione si trova in locale, e quindi non ci sono grosse limitazioni, ma sicuramente in futuro dovrà essere installata su hosting privati che permettono solo l'accesso al context di Tomcat.

    Io da parte mia ho preso in esame Lucene, sto cercando di saltarne fuori con le jsp.

  4. #4
    Se ho capito bene tu vuoi fornire una funzione di ricerca testuale sulle pagine del tuo sito e non sull'eventuale db che la tua webapp gestisce giusto? Beh se è così mi permetto di darti un consiglio che se pur banale ti potrebbe risultare utile: fallo fare a google, è possibile inserire un semplice form di ricerca con google all'interno del tuo sito semplicemente passando gli opportuni parametri a google, come hanno fatto quì ad esempio: http://mhp-interactive.org/. Dai uno sguardo al form di ricerca in alto a destra, puoi specificare se cercare una parola chiave su tutta la rete ho solo sul tuo sito, quello è realizzato in maniera banale con del semplice codice html. Vedi un pò se ti garba
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    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
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Originariamente inviato da unomichisiada
    Se ho capito bene tu vuoi fornire una funzione di ricerca testuale sulle pagine del tuo sito e non sull'eventuale db che la tua webapp gestisce giusto? Beh se è così mi permetto di darti un consiglio che se pur banale ti potrebbe risultare utile: fallo fare a google, è possibile inserire un semplice form di ricerca con google all'interno del tuo sito semplicemente passando gli opportuni parametri a google, come hanno fatto quì ad esempio: http://mhp-interactive.org/. Dai uno sguardo al form di ricerca in alto a destra, puoi specificare se cercare una parola chiave su tutta la rete ho solo sul tuo sito, quello è realizzato in maniera banale con del semplice codice html. Vedi un pò se ti garba
    Si avevo già visto lo stesso sistema su php.net, però non è che fare pubblicità a Google tramite il suo logo mi vada molto a genio.
    Il mio problema credo che sia l'inesperienza. Non ho mai fatto un motore di ricerca interno e quindi procedo a tentoni. Mi spiegate come fanno gli altri siti a integrare questo tipo di funzionalità, creano una tabella con il contenuto di ogni pagina??

  7. #7
    Originariamente inviato da Sandrocchio_0.1
    Si avevo già visto lo stesso sistema su php.net, però non è che fare pubblicità a Google tramite il suo logo mi vada molto a genio.
    Il mio problema credo che sia l'inesperienza. Non ho mai fatto un motore di ricerca interno e quindi procedo a tentoni. Mi spiegate come fanno gli altri siti a integrare questo tipo di funzionalità, creano una tabella con il contenuto di ogni pagina??
    per un motore di ricerca sul db gestito dalla tua web app si fanno delle quesry sql, per un motore di ricerca testuale sulle pagine credo che la strada da seguire sia quella indicata da eumene
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    in questa implementazione proprietaria di motore di ricerca come hai risolto il problema di trascurare le parti "spurie" della parola chiave immessa dall'utente?
    Nella versione attuale del motore non verifico questo tipo particolare di parole, ma non è complesso da realizzare.

    La parte di front - end del sistema è basata sulla paginazione di un risultato di una query eseguita su una tabella dedicata.

    La query è eseguita costruendo il WHERE ponendo in AND tutte le parole inserite nel campo ricarca, che separo con un StringTokenizer.

    Basta un controllo su ogni elemento dello StringTokenizer e verificare se si tratta o meno di una parola spuria.

    Sicuramente un file può essere sufficiente per fare il controllo.

  9. #9
    Originariamente inviato da eumene
    Nella versione attuale del motore non verifico questo tipo particolare di parole, ma non è complesso da realizzare.

    La parte di front - end del sistema è basata sulla paginazione di un risultato di una query eseguita su una tabella dedicata.

    La query è eseguita costruendo il WHERE ponendo in AND tutte le parole inserite nel campo ricarca, che separo con un StringTokenizer.

    Basta un controllo su ogni elemento dello StringTokenizer e verificare se si tratta o meno di una parola spuria.

    Sicuramente un file può essere sufficiente per fare il controllo.
    Aspetta però, la mia domanda non è tanto come separi le parole
    che poi compongono la query di ricerca ma come faresti (se lo dovessi implementare) a distinguere le parole spurie da quelle buone. Ti ho già postato sopra qualche esempio, che ne so salvi tutte le parole da NON cercare in un file e consulti il file ad ogni ricerca oppure cos'altro faresti?Hai altre idee?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #10
    alla fine sono stato costretto a replicare i contenuti delle pagine statiche su di un DB (i tempi stringono). Questo è quello che fa il mio servlet per raccogliere le stringhe.
    codice:
    try{	String tmpWords = (String)request.getAttribute("words");
    				request.getSession().setAttribute("words", tmpWords);
    				String[] words = null;
    				StringTokenizer wordsTokenizer = new StringTokenizer(tmpWords);
    				int i = 0;
    				while(wordsTokenizer.hasMoreTokens()){
    					String word  = (String)wordsTokenizer.nextToken();
    					if(!word.equals("a") && !word.equals("e") && !word.equals("i") && !word.equals("o")
    						&& !word.equals("u") && !word.equals("un") && !word.equals("una") && !word.equals("di")
    						&& !word.equals("uno") && !word.equals("da") && !word.equals("del") && !word.equals("delle")
    						&& !word.equals("della") && !word.equals("dei") && !word.equals("il") && !word.equals("la")
    						&& !word.equals("le") && !word.equals("gli") && !word.equals("perchè") && !word.equals("per")
    						&& !word.equals("quando") && !word.equals("dove") && !word.equals("chi") && !word.equals("come") 
    						&& !word.equals("")){
    							words[i] = new String(word);
    							i = i++;
    						}
    				}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.