Newsgroup: it.lavoro.professioni.webmaster
Titolo: Vorrei un piccolo-grande motore di ricerca

Ciao vorrei creare un mio piccolo-grande motore di ricerca, ho già molte 
basi anche di crawling dei motori di ricerca, conosco bene php e mysql. 
Il mio problema è la gestione della mole di dati. Da prove che ho 
effettuato noto che arrivando a tabelle con 20000-30000 record (campi 
text in cui cerco con l'istruzione mysql "like") le query iniziano a 
diventare lente per poi arrivare a diventare insopportabilmente lente al 
crescere del numero di record.
Considerato che mi piacerebbe gestire qualcosa come 5 milioni di record 
mi chiedo come e se sia possibile senza comprare una megaserverfarm con 
database distribuito. Vi ringrazio.

 crescere del numero di record.
mmmm se volessi fare una cosa del genere utilizzerei le istruzioni di
ricerca match su fulltext  e non like (piuttosto lenta e poco utile a
gestire le combinazioni di key), con le istruzioni match gestisci in
termini di decimi di secondo tabelle con 10xE9 records quindi miliardi
di records... darei un'occhiata in tal senso alla documentazione di
mysql.
In ogni caso, perdonami, ma credo che basare un sistema di ricerca su
un RDBMS (anche se MySql non è propriamente tale) non sia proprio la
scelta più azzeccata, semplici motori magari scritti in C (non C++ ma
proprio C secco) che lavorano su dat (database binari) permettono
svariati milioni di lookup/secondo anche su macchine non propio
performantissime.


 ha scritto nel messaggio 
news:MPG.2009c9813...@news.tin.it...

Io penso che a parte le ottimizzazzioni varie oltre un certo punto ti tocca 
sicuramente usare dei sistemi distribuiti e con le strapalle :)
Argomento molto interessante!
-- 
Roberto Bandini
WebEngineer
Direttore Tecnico
Perito in Elettronica e Telecomunicazioni
Mobile: 
+39 349 6360439
Website: 
http://www.robertobandini.it
 

I grossi motori di ricerca non usano queste strategie. In pratica creano 
degli indici per ogni singola parola, e quando si va a fare una ricerca, in 
realtà i motori grossi, hanno già i risultati, semplicemente caricano gli 
indici e li incrociano fra di loro, nel caso di più parole.
Io ho fatto una cosa simile, e se vuoi ti do un sito dove puoi vedere come 
fa la ricerca su 350000 pagine/indirizzi, ricerca di una parola, e potrai 
vedere che il risultato è immediato. Non ho finito ancora, perchè devo 
scrivere il pezzo che incrocia gli indici, e poi ho deciso di rifare il mio 
spider, togliendo il pezzo che scarica le pagine e sostituendolo con 
funzioni esterne (richiamo a wget), e inoltre voglio impostare diversamente 
il processo di indicizzazione, infatti avevo previsto di creare un grande 
database hash per tutte le pagine, e scansionavo le pagine mischiate, adesso 
ho deciso di fare diversamente e di scansionare 1 sito alla volta, e di 
creare un database hash più piccolo contenente solo gli indirizzi di dei 
siti principali, e poi per ogni sito incluso, un database hash a parte.
Gli indici invece li organizzo in una struttura ad albero, sfruttando il 
filesystem del sistema operativo.
Guarda: 
http://www.malmignatta.com
Ci sono 350000 pagine indicizzate, ma ce ne potrebbero essere anche 10 
milioni, c'è un archivo hash di 2 gigabytes con gli indirizzi delle 
pagine(solo gli indirizzi), e ci sono gli indici per ogni parola trovata 
nelle pagine scansionate. Se inserisci la ricerca per qualche parola, puoi 
vedere che esegue anche un ordine nei risultati:
Prova a cercare per esempio google, news, assicurazioni o qualche altra 
cosa. Funziona solo con 1 parola, perchè non ho mai completato(in realtà è 
anche semplice da completare, ma non ho tempo).
Quel sito si trova su un normalissimo server, Pentium IV, con 2 GB di Ram, e 
con altri 500-600 siti :), puoi provare a cercare delle parole, e vedrai che 
ti tira subito fuori i risultati senza sofferenze. E li tira fuori anche con 
un certo ordine di "rilevanza".
Questo motore ha dei difetti, adesso ho in mente altre tecniche, per meglio 
effettuare lo spidering, e per creare anche la cache delle pagine, ed altre 
cose, ed appena avrò tempo, ovvero appena riesco a smaltire il lavoro 
arretrato che ho, modificherò il mio spider, e creerò un motore di ricerca 
per i siti Italiani.
Facendo una stima, dovrebbero esserci circa 15 milioni di siti Italiani, ed 
ho calcolato che con un HD di 500 GB si riesce ad indicizzare circa 40 
milioni di pagine, quindi con un normalissimo Server con Xeon doppio 
processore, e una decina di HD da 500 GB l'uno, collegati via Usb, si 
potrebbe facilmente creare un grande motore di ricerca, in grado di 
scandagliare i siti Italiani(200 milioni di pagine), e di indicizzarli in 
periodi di 2 mesi, usando un paio di megabit di banda al secondo.
Qui: 
http://www.malmignatta.com
, gli indici vengono caricati e ordinati in 
Php, lo spider invece è fatto in Delphi/Pascal, e funziona su Windows, lo 
spider scarica le pagine e crea gli indici, il motore in Php invece carica 
gli indici cercati dagli utenti, e li ordina, e poi dovrebbe intersecarli 
nel caso di ricerche di più parole (questa è la parte che manca, che non ho 
ancora sistemato per mancanza di tempo).
Se riesco a trovare il tempo, ristrutturo il mio spider, con le nuove 
tecniche che ho in mente, ed avvio il funzionamento di un motore di ricerca 
che competerebbe con i più grossi Italiani. Ho anche creato un sistema di 
annunci testuali, che puoi vedere per esempio sullo stesso sito "spot by 
globospace.com
".
-- 
GloboSpace Hosting Services
http://www.globospace.com
 

 [cut]
L'argomento M.d.R. mi interessa parecchio, anche se ne ho bisogno per
applicazioni non web. Solo una domanda: l'algoritmo dell'ordinamento
dei tuoi risultati tiene conto di qualche regola che stabilisca
l'importanza (e quindi la posizione più alta) delle pagine trovate ?
Non ti chiedo di dirmi quale sia la regola, ma solo se la sfrutti o
meno... :)
Ciao e grazie.
PS: Sai dove posso trovare info sul discorso dell'incrocio degli indici
? Per il mio software le ricerche sono quasi sempre tra le due e le
quattro parole...

Un'ultima cosa: se per caso ti serve un grafico o un web-designer fammi
un fischio...
Ho visto che i tuoi siti soffrono di un disordine cronico ;)
PS: Sto scherzando, però devo ammettere che l'home page di
http://www.globospace.com/
 fa impressione per il caos che genera alla
vista!!!
:)
Francesco D'Aguanno
http://daguanno.blogspot.com/

 Ciao vorrei creare un mio piccolo-grande motore di ricerca
Personalmente, nei miei siti conto di implementare a breve un sistema
basato su Swish-E, veloce e semplicissimo da usare.
http://www.swish-e.org

parole...
E' una cosa semplicissima, bisogna solo applicare un algoritmo di merging. 
Ovvero in pratica devi solo prendere le pagine che compaiono nelle varie 
liste delle parole se si usa l'AND, oppure tutte le pagine elencate in tutte 
le liste se si usa OR.


vista!!!
Lo so, ma non ho tempo per badare alla grafica, ricevo giŕ molti ordini, ed 
ho molte richieste da smaltire, cosě č meglio lasciarla che fa un poco 
schifo, altrimenti riceverei troppi ordini :P
Quel sito ha 1800 accessi unici al giorno, l'ho avviato l'anno scorso. IL 
file principale del codice in php, ha una dimensione di circa 1,2 megabytes, 
ha tante di quelle funzioni quel sito, e il database ha circa 280 tabelle, 
ha tante di quelle funzioni, che č impossibile organizzarle in maniera 
chiara, la confusione č inevitabile. Perň una volta imparato ad usare, il 
sito diventa molto semplice e chiaro.


 le liste se si usa OR.
Il problema è che io lavoro con milioni di dati (anche 3 milioni...) e
non riesco a scrivere un algoritmo che sia davvero efficiente, nel caso
di ricerche con più parole (sia in OR che in AND) soprattutto se la
ricerca è in LIKE.
Ma come ti ho detto, non devo eseguire la ricerca su pagine web... Il
discorso sarebbe troppo lungo... Ti chiedevo solo se conosci siti,
articoli o libri (da acquistare) che trattino l'argomento MdR...
Grazie ancora.