Un motore di ricerca è un sistema automatico che analizza un insieme di dati spesso da lui stesso raccolti e restituisce un indice dei contenuti disponibili classificandoli in base a formule matematiche che ne indichino il grado di rilevanza data una determinata chiave di ricerca.
Un motore di ricerca si può dividere in tre parti:
Crawling
| |
Scaricare tutte le pagine
|
Indexing
| |
Salvare i dati con la possiblità di recuperarli in tempo veloce (information retrieval)
|
Query Processing
| |
Ordinare i risultati di una ricerca in base alla qualità/pertinenza dei risultati
|
Crawling
Un motore di ricerca deve scaricare tutte le pagine presenti in rete.
Ci sono problemi nel fare ciò:
Pagine dinamiche
|
Spammers
|
Scelta di un ordine opportuno
|
Pagine dinamiche
Una pagina puo variare contenuto passando parametri differenti, su alcuni siti quei parametri sono casuali, possono quindi esserci moltissime pagine con indirizzo differente ma con lo stesso contenuto, alcuni parametri a volte vengono addirittura utilizzati per salvare session o cookie.
Una pagina dinamica cambia contenuto molto spesso, basti pensare a un blog o a un forum molto visitato, è compito del motore di ricerca stabilire ogni quanto riscaricare le pagine trovando un buon compromesso tra il non avere pagine troppo vecchie e il non appesantire troppo il server ospitante il sito.
Spammers
Uno spammer può rovinare il lavoro di un crawler in vari modi:
può inserire nella propria pagina migliaia di link che puntano al proprio sito, con nomi di pagine casuali, in modo da trattenere il più possibile il crawler sul sito, facendogli sprecare banda, tempo e CPU
può rallentare le risposte per far perdere tempo
può inserire link a altri siti (che faranno la stessa cosa) per innalzare la propria popolarità
Esempio:
Passo 1:
il crawler ha 100 pagine da visitare, 1 è di uno spammer.
Pagine problematiche 1%
Passo 2:
dopo averle visitate si supponga che le 99 pagine normali contengano 10 link a pagine normali e quella dello spammer 100 link a proprie pagine (create nello stesso modo)
Ora il crawler ha 990 pagine normali e 100 di spammer
Pagine problematiche 9.17%
Passo 3: l'esplorazione continua nello stesso modo
9900 - 10000
50.25% !
Passo 4:
99000 - 1000000
99% !!
Scelta di un ordine opportuno
Scaricando le pagine si troverà all'interno di esse link a nuove pagine.
Ci sono vari modi di procedere nello scaricare le nuove pagine:
BFS - Breadth First Search (Visita in ampiezza)
| |
I nuovi link vengono inseriti in una coda, in questo modo i nuovi link trovati sono i primi a essere visitati.
Questo metodo ha il pregio di non favorire alcuni siti rispetto ad altri.
|
Qualita'
| |
I nuovi link vengono inseriti in una coda con priorità con un ordine dato dalla popolarità (parziale) che ha il sito.
Questo metodo ha il pregio di esser poco vulnerabile all'azione degli spammer.
|
Casuale
| |
Viene scelto il successivo sito da visitare in modo casuale.
|
Indexing
I dati devono essere salvati in modo di poterli consultare velocemente, per fare ciò viene usata una struttura dati chiamata TRIE, ovvero un albero in cui ogni arco indica il passaggio da una lettera di una parola a quella successiva.
Le foglie di questo albero conterranno una lista di pagine contenenti quella parola.
Esempio generale di una TRIE per la frase "there is a tavern in the town"
Ed ecco come viene usata una TRIE da un motore di ricerca
Da ogni pagina vengono estrapolate tuttu le parole, vengono inserite in questa struttura e in ogni foglia raggiunta viene inserito il link alla pagina.
Questa struttura occupa molto meno spazio rispetto alla dimensione di tutte le pagine, solitamente viene tenuta in RAM e viene salvata, oltre al link alla pagina, anche la posizione della parola.
Query Processing
Questa fase si può dividere in due parti:
ricerca dei risultati
|
ordinamento dei risultati
|
La prima fase viene svolta facendo un'intersezione dei nodi dati scorrendo la TRIE per ogni parola della query.
La seconda parte è più complessa.
Due metodi tra i più noti sono PageRank e HITS.
HITS
A ogni pagina vengono associati due valori, authority e hub.
Il primo indica la qualità del contenuto della pagina, il secondo indica invece la qualità dei collegamenti contenuti nella pagina.
Il primo viene calcolato facendo una somma dei valori hub delle pagine che collegano alla pagina stessa, il secondo viene calcolato facendo una somma dei valori authority delle pagine a cui la pagina punta.
In poche parole: una pagina è buona se i collegamenti che puntano a quella pagina sono buoni, i collegamenti di una pagina sono buoni se il contenuto delle pagine a cui punta quella pagina sono buoni.
PageRank
A ogni pagina viene associato un numero indicante la popolarità.
Questo numero è dato dalla somma della popolarità delle pagine che puntano a quella interessata, ogni popolarità va divisa per il numero di collegamenti uscenti da ogni pagina.
dove P è la popolarità e L sono i collegamenti contenuti nella pagina.
HITS e PageRank sono solo un fattore moltiplicativo per il punteggio di una pagina. Il punteggio è calcolato guardando dove si trovano le parole cercate.
Una pagina con una parola nel titolo avrà un punteggio maggiore di una con la parola a fondo pagina.
Una scala potrebbe essere:
1.nome sito
|
2.descrizione dei link provenienti da altri siti
<a href="http://miosito/pag">queste parole sono molto significative</a>
|
3.indirizzo pagina
|
4.titolo
|
5.sottotitoli
|
6.vicinanza parole
|
Google - alcune informazioni
contiene circa 8 miliardi di pagine (raddoppiano ogni anno)
ha 200000 PC non molto potenti coi quali soddisfa tutte le richieste
un PC viene cambiato solo quando si rompe
per ogni singola query mette in funzione 5 PC
200 milioni di ricerche al giorno
usa pagerank, ma è solo uno dei numerosi fattori.
Il mio motore di ricerca
E' diviso in 4 parti:
Interfaccia web
|
Crawler
<a href="http://miosito/pag">queste parole sono molto significative</a>
|
Indexer
|
Query handler
|
La comunicazione tra i vari programmi è effettuata tramite socket.
Le pagine sono salvate su database dal crawler, ecco lo schema ER che rappresenta la situazione:
L'indexer poi legge tutto il database e inserisce i risultati nella trie.
Il query handler prende i risultati dall'indexer e li ordina dando un punteggio a ogni pagina, quel punteggio verrà moltiplicato per il logaritmo dei link che puntano al sito ospitante la pagina.
L'interfaccia web mette in comunicazione l'utente col motore di ricerca.
|