Cosa è un motore di ricerca

Cosa è un motore di ricerca?

Bene, rispondiamo a questa domanda immaginando di dover creare un motore di ricerca, vale a dire, di costruirlo, quindi di programmarlo da zero.

Creare un motore di ricerca da zero?

Qualcuno una volta ha detto che a chiunque venisse questa idea in mente, avrebbe consigliato di comprare una buona bottiglia, scolarsela tutta e dimenticare… Il compito sarebbe veramente arduo.

Cosa fa un motore di ricerca?

La risposta breve è, indicizza informazioni presenti in un “archivio” e le invia al ricercatore quando questi inizia una query, cioè, interroga il sistema.

In modo più dettagliato, scopriamo alcune delle funzioni base.

Avrete sentito parlare di Web Spider, anche chiamato Web Crawler, o Spiderbot, e spesso abbreviato in Crawler. Questo, altro non è che un bot Internet che naviga sistematicamente nel World Wide Web, in genere allo scopo di indicizzare il Web stesso. Ancora meglio, si tratta di funzioni svolte da un algoritimo che scandagliano Internet (World Wide Web) per indicizzare le informazioni.

Okay, dunque il crawler, o spider, o come volete chiamarlo, inizia a creare alcuni collegamenti, analizza le pagine e trova altri collegamenti e memorizza anche le pagine scaricate.

Non si tratta di un sistema DDOS. In linea di principio, abbiamo un programma controller alloggiato in un server sulla rete che tiene la contabilità di quali collegamenti sono stati attraversati e quali sono ancora da attraversare, e i programmi client (programmi di lavoro) che gli chiedono collegamenti da scaricare e analizzare, che poi rispediscono lo stato e tutti i nuovi collegamenti che hanno ottenuto dalle pagine Web scaricate. Apparentemente facile, no?

Ranking, ovvero classifica delle pagine Web

OK! Primo piccolo problema. Bisognerebbe creare il cosiddetto ranking, cioè la classifica delle pagine Web. Questo implica anche penalizzare pagine i cui contenuti sono sospetti.

A questo punto hai scaricato una gigantesca quantità di pagine dalla rete, di cui molte, ma veramente molte, conterranno informazioni di scarsissima qualità per il ricercatore. Qui devi però agire sul lessico, quindi lavorare sulle parole. Ogni lingua ha un certo numero di suffissi per ogni parola che ne modificano anche solo leggermente il significato. Cosa intendo? Immagina la parola “libro” che può essere modificata come “libretto”, “libriccino”, “librone”, etc. Si ottengono risultati molto migliori se si raccolgono tutte le forme di una parola nella stessa radice, soprattutto per le ricerche con non molti risultati, ovvero si dà un bonus alla forma esatta che l’utente stava cercando. Ciò significa anche eseguire questo tipo di elaborazione in due passaggi distinti, ne guadagna la velocità e la precisione.

Passaggio 1

Tutti i dati considerati ti permettono di creare un dizionario di tutte le forme di radice, tutte le forme derivate, e trasformare le pagine web in dati numerici reali, quindi conoscere quali parole ci sono e in quale posizione. La posizione è fondamentale perché ciò che è sulla prima pagina ha molta più rilevanza di ciò che si trova nella quindicesima, ad esempio. Puoi anche fare un po ‘di congetture e indovinare a quale radice appartengono le parole errate, che possono essere state digitate. Ovviamente, dato che tutte queste informazioni si trovano sulla rete da qualche parte, l’architettura sarà sempre client-server, come detto sopra; certo, il dizionario è fondamentale ma i dati rimangono dove sono.

Passaggio 2

Devi creare un indice. Immagina un grande tavolo in cui le righe sono parole. Quindi ogni parola ha un elenco di ID (codici numerici identificativi) di pagine web in cui la parola viene visualizzata insieme ad alcuni dati rudimentali (del tipo, dove viene visualizzato per primo, quante occorrenze ci sono etc.), questo significa che il tuo algoritmo deve calcolare quanto questa pagina soddisfa i criteri di ricerca dell’utente.

Ancora una volta, l’architettura client server rimane inalterata ma questa volta ad essere fondamentale è l’indice il quale è gestito dal server. La complicazione? Devi gestire la memoria cache…

Programmare il server

Ora bisogna programmare il server per fare sì che risponda alle domande poste dagli utenti attraverso la pagina web. Il programma dovrà tenere conto dell’elenco dei risultati della query (interrogazione di ricerca posta dall’utente) e fare una classifica (ranking). La prima volta dovrà eseguire tutto questo in una piccolissima frazione di secondo, dopodiché prende i dati dalla cache. Memorizzare nella cache è infatti cruciale, perché i tempi di attesa contano e molto!

Perché a questo punto dobbiamo classificare? Perché l’utente si aspetta un risultato che sia quanto più soddisfacente in base alla sua ricerca.

Il ranking comporta alcuni passaggi complicati. Una stringa ricercata potrebbe essere anche molto generica e bisogna cercare di intuire l’intenzione dell’utente, questo è quello che fa Google, ad esempio, con gli algoritmi non con la magia, ovviamente.

Il nucleo “pensante” del motore di ricerca

Il nucleo di un motore di ricerca è un indice inverso.

Quindi, immaginiamo il web come un ipotetico database. Pensiamo alla rete, quindi al web, come una tabella a 2 colonne: in colonna 1 abbiamo la URL, cioè l’indirizzo, ad esempio questositoweb.com, in colonna 2 abbiamo il contenuto della pagina, cioè testi, immagini, etc.

COL.1 URLCOL. 2 CONTENUTO
questositoweb.com Ciao, io sono un sito web. Qui dentro trovi un mucchio di informazioni su blah… blah… blah…

L’URL è la chiave primaria. Digiti l’URL nel tuo browser, il browser cerca la chiave primaria nel database, ottiene la riga e ti mostra il contenuto della pagina. Questo è quello che accade.

Una soluzione semplice, logica e lineare. Giusto? Ma non va per niente bene. Perché? Perché se stai cercando la parola “scarpe”, il motore di ricerca deve esaminare tutti i record e scansionare la colonna del contenuto della pagina di ogni riga per trovare la parola scarpe. La notazione si descrive O(n) dove la O (o maiuscola) sta per la rappresentazione relativa della complessità dell’algoritmo. Il problema è quel n fra parentesi, che trattandosi del web, può diventare molto ma molto, molto grande.

Allora cosa facciamo? Capovolgiamo tutto! Rendiamo il contenuto della pagina la chiave e l’URL il valore, quindi la tabella si inverte. Dobbiamo poi anche dividere il contenuto della pagina in singoli termini e creare un record per ogni termine.

Poniamo il caso che la parola ricercata sia appunto “scarpe” e per semplicità diciamo di trovare 3 sole pagine, queste:

  • scarpaok.com – Scarpe Italiane per ogni piede
  • scarpamejodetutte.com – Scarpe in pelle a Roma
  • ermejoderoma.it – Ristorante a Roma

La nostra tabella a questo punto conterrà questi dati

1 Italiane “http ://scarpaok.com”
2 Scarpe “http ://scarpemejodetutte.com”, “http ://scarpaok.com”
3 Roma “http ://scarpemejodetutte.com”
4 Ristorante “http ://ermejoderoma.it”

Ora, quando qualcuno cerca “scarpe”, cerchi semplicemente il record di “scarpe” e ottieni entrambe le pagine web. Se così fosse, abbiamo ottenuto un risultato fulmineo, probabilmente anche più velocemente di Google.
Ma se il ricercatore digita “scarpe italiane”? Semplice, cerchiamo subito gli url tra la prima e la seconda voce, giusto? Matematicamente parlando, stiamo eseguendo un’intersezione di 2 set. Pertanto, è necessaria una sorta di algoritmo in grado di eseguire un’intersezione veloce tra set di dati di grandi dimensioni.
Ecco, qui il problema lo si può risolvere acquistando almeno un paio di migliaia – forse anche più – di server, magari il nostro motore di ricerca è davvero più veloce di Google!

Però, però… Qualcuno potrebbe invece ricercare “Scarpe Roma”, cosa succede allora? Che dobbiamo espandere i termini usando sinonimi. In sostanza, è necessario un dizionario di sinonimi (parole raggruppate per significato). Quindi, quando si inseriscono i record in una riga, si inseriscono i record in esso sinonimi. Pertanto la tabella è ora così:

1Roma http ://scarpemejodetutte.com, http ://ermejoderoma.it
2Italiane http ://scarpaok.com http ://scarpemejodetutte.com
3Scarpe http ://scarpemejodetutte.com, http ://scarpaok.com
4Pelle http ://scarpemejodetutte.com
5Ristorante http ://ermejoderoma.it

Ora siamo pronti a cercare investitori, perché con un motore di ricerca così possiamo battere la concorrenza di Google.

Proprio sicuri?

Vediamo un po’! Cosa accade se qualcuno cerca “scarpe antiche romane”? In tal caso, cosa scrive esattamente? E se scrivesse, “voglio acquistare scarpe antiche romane” cosa accadrebbe? Questa è una cosa che Google sa fare molto bene. Tutte le parole al di fuori di “Scarpe antiche romane” non sono considerate, sono chiamata in gergo tecnico “stopwords” e l’algoritmo non le prende in considerazione, per lui la ricerca è semplicemente, “scarpe antiche romane”. In questo caso è necessario impostare un dizionario con parole d’ordine, che sono parole chiave, che si può usare anche per evitare che gli utenti cerchino parole scurrili e oscenità.

Quindi abbiamo superato un altro ostacolo…

Beh, a parte ciò che comporta, perché non è che tutto quello che abbiamo detto lo si faccia con 10 righe di programmazione in una sera tra una chicchiera e un’altra, ci sono tante altre cose ancora da prendere in considerazione. Come sappiamo tutti, ognuno di noi commette errori di ortografia, più o meno coscientemente. In questo caso, esistono algoritmi che convertono le parole in codici in base al loro suono. Possiamo converire tutti i termini – e quindi i termini di ricerca – in codice soundex. Okay, ma questo vale per la lingua Inglese, e per l’Italiano? Per non parlare delle altre lingue se vogliamo che il nostro motore di ricerca sia multilingue. Sarebbe quindi buono avere un database di parole italiane con le relative chiavi, perché il soundex si base sulla pronuncia… leggi anche questo articolo per maggiori chiarimenti. Tuttavia, esistono algoritmi che svolgono la stessa funzione adattandosi alle varie lingue.

Allora ci siamo proprio!!

Oops… Ma allora ci siamo proprio dimenticati della questione ranking? Dobbiamo sapere come classificare le pagine web. Che tipo di ordinamento implementiamo nel nostro motore di ricerca?

Siccome siamo geniali, ci viene in mente di ricorrere ad un metodo semplice, classifichiamo le pagine in base a quante volte il termine compare. Bene! Meritiamo un premio Nobel!! O forse no?

Proprio No! Questo metodo è completamente fallace. In questo modo gli utenti riempiono le pagine, in questo caso, della parola “scarpe, scarpa” e poco importa poi se la qualità delle informazioni contenute è veramente scarsa. Questo metodo si chiama keyword stuffing, cioè riempimento di parole chiave, ed è gravemente penalizzato da Google e da qualunque motore di ricerca che sia degno di questo nome.

Come ordinare dunque?

Non possiamo lasciare quest’onere all’utente. Se fosse nelle mani degli utenti, il nostro server – o i nostri server – collasserebbe in men che non si dica per via di milioni e milioni di richieste. E allora? Possiamo fare in modo di leggere la colonna chiave della tabella in modo parziale, in mod che non dobbiamo ordinare su ogni ricerca.

L’algoritmo pagerank (classificazione delle pagine) di Google è il segreto del suo successo. È un algoritmo proprietario e di come funziona sappiamo veramente molto poco. Non fidatevi di quelli che dicono di conoscere come Google classifica i siti.

Tramontata l’idea di competere con Google, uno potrebbe voler creare un motore di ricerca per uso interno, ad esempio per ricercare tra le migliaia di dischi di vinile di sua proprietà, oppure la collezione di farfalle, o che so. E già… Google è proprio forte!!

Se proprio qualcuno è interessato a fare qualcosa del genere – non a competere con Google, pero! – vi consiglio Solr, Solr, piattaforma di ricerca aziendale open source estremamente veloce, costruita su Apache Lucene.

Conclusioni

Ora che sappiamo quanto è complesso un motore di ricerca, sappiamo anche perché è complicato classificarsi tra le prime posizioni. Il c.d. SEO è una cosa alquanto importante e dovete sempre pensare di produrre contenuti interessanti senza pensare a come vi classificherete. In molti potranno dirvi di essere maghi del SEO e quindi illudervi di grandi risultati ma la realtà è molto differente. Una cosa molto importante è che – fra le tante – manteniate il vostro sito molto leggero, ovvero, non inserite mai immagini e/o video pesanti che caricano lentamente e penalizzano l’esperienza dell’utente. Chiunque, come vede che un sito non risponde come dovrebbe, lo chiude e cerca altro. Ma questa è solo una delle tante cose…

Photo by Diggity Marketing on Unsplash