Al fine di essere rapido ed efficace (ovvero, che dia risposte pertinenti), il motore di SPIP utilizza un sistema di indicizzazione dei contenuti. L’indicizzazione consiste nell’analizzare tutti i testi contenuti in SPIP, nell’estrarre tutte le parole e nel registrare per ogni parola il luogo in cui essa appare.
Al pari dell’indice di un libro che presenta le parole importanti del libro seguite dai numeri di pagina in cui appaiono, l’indice del motore di ricerca fa corrispondere ad ogni parola utilizzata sul sito il numero dell’articolo, della breve... in cui trovarla.
Poi, quando si utilizza il motore per effettuare una ricerca, SPIP non ha più bisogno di consultare tutti i testi del sito ma consulta semplicemente l’indice per sapere dove si trovano quelle date parole. Così facendo si risparmia moltissimo tempo (e più il sito è grande e più si guadagna tempo).
L’indicizzazione
Quindi il principio è il seguente: prendere un testo (più o meno lungo), estrarre da esso tutte le parole e scrivere ogni parola in un database, facendo corrispondere questa parola al luogo dove si trova.
Per esempio, il nostro sito ha tre articoli, i cui testi (molto corti) sono:
- articolo 1: "Il piccolo gatto è morto di freddo e di fame."
- articolo 2: "Il gatto grosso è tornato a casa."
- articolo 3: "La casa resiste al freddo."
Estraiamo le parole di ogni articolo e registriamo per ogni parola a quale articolo corrisponde (prenderemo solo le parole di oltre tre lettere, più avanti spieghiamo il perché):
- piccolo: 1
- gatto: 1, 2
- morto: 1
- freddo: 1, 3
- fame: 1
- grosso: 1
- tornato: 2
- casa: 2, 3
- resiste: 3
E così via, considerando che il nostro sito è certamente molto più grande e che gli articoli sono molto più lunghi.
Se cerchiamo la parola gatto:
- una soluzione che non ricorre all’indicizzazione è quella di rileggere tutti gli articoli per trovare la parola gatto; su un sito grande, anche per un computer, questa operazione richiede molto tempo;
- poiché noi abbiamo un indice è sufficiente consultare la voce gatto: si scopre immediatamente che essa si trova negli articoli 1 e 2.
La ponderazione
All’indicizzazione si aggiunge un secondo principio: la ponderazione. Si tratta di tentare di rendere il motore più pertinente. Per esempio, se una parola appare nel titolo di un articolo, e nel corpo del testo di un altro articolo, si considera che se ricerchiamo questa parola si deve indicare prima quello in cui appare nel titolo. Inoltre, se una parola appare 25 nello stesso articolo, e solamente due volte in un altro, si vuole mostrare per primo l’articolo in cui la parola è più frequente.
Vediamo che la semplice indicizzazione non è sufficiente. Se si cerca gatto, si troveranno gli articoli in cui appare la parola ma senza poter ordinare questi articoli (in base al fatto che la parola appare una volta o 20 volte, o se si trova nel titolo o solo nel testo...).
Pertanto, SPIP calcola una ponderazione per ogni parola in ogni articolo. In altre parole, attribuisce dei punti a questa parola in base al luogo dove essa si trova e al numero di volte dove appare:
nel titolo | 8 punti |
nel sottotitolo | 5 punti |
nell’occhiello | 5 punti |
nella descrizione | 4 punti |
nell’introduzione | 3 punti |
nel testo | 1 punto |
nel post-scriptum | 1 punto |
Se la parola appare più volte si sommano le ricorrenze.
Per esempio, se in un articolo la parola gatto appare:
- una volta nel titolo: 8 punti
- due volte nella descrizione: 2 volte 4 = 8 punti
- sei volte nel testo: 6 volte 1 = 6 punti
- totale: 8 + 8 + 6 = 22 punti.
La parola gatto, nell’indice, viene quindi registrata in questo modo:
- gatto, nell’articolo numero X, 22 punti;
- gatto, nell’articolo numero Y, 15 punti;
- ...
Se si cerca la parola gatto, grazie all’indice, si saprà che essa si trova negli articoli X e Y, e inoltre si possono ordinare questi articoli: 22 punti in X, 15 punti in Y, quindi si considera che l’articolo X è più corrispondente alla ricerca.
Le parole chiave: molti utenti confondono le parole chiave e l’indicizzazione. Le parole chiave non hanno, per loro natura, nessun rapporto con l’indicizzazione: quando SPIP effettua una ricerca, esso non ricerca tra le parole chiave associate agli articoli (sarebbe molto limitata), esso ricerca nell’indice che ha fabbricato partendo dal testo esatto degli articoli. Quindi, nel principio dell’indicizzazione, le parole chiave non intervengono affatto nel processo.
Di contro, le parole chiave sono comunque utilzzate per realizzare la ponderazione degli articoli. Se una parola chiave è associata a un articolo, essa entra nell’indicizzazione dell’articolo con una forte ponderazione (12 punti per il nome della parola chiave, 3 punti per la sua descrizione). Così, se il nostro articolo Y (15 punti considerando solo il suo contenuto ) è associato alla parola chiave gatto (perché con questa parola si indica che è l’argomento dell’articolo), è necessario aggiungere all’indicizzazione di questo articolo, per la parola gatto, i 12 punti della parola chiave: totale 27 punti. Nella nostra ricerca su gatto, l’articolo Y sorpassa ora l’articolo X.
Infine, facciamo notare che tutti gli elementi di contenuto di SPIP sono anch’essi indicizzati: gli articoli, le brevi, le rubriche, gli autori, le parole chiave, i siti in repertorio (se il sito è in syndication saranno indicizzati anche i titoli degli articoli prelevati su questo sito).
Dove sono immagazzinati?
I dati dell’indicizzazione sono direttamente immagazzinati nel database. Questa parte è un po’ tecnica, non ci dilungheremo su questo argomento.
È importante sapere solo che vi sono molteplici indici (elenchi di parole), corrispondenti ognuno a un tipo di contenuto (un indice per gli articoli, un indice per le rubriche, un indice per le brevi...). Inoltre, contrariamente alla spiegazione sopra riportata in cui le voci dell’indice sono parole, in SPIP le voci degli indici sono numeri calcolati a partire da queste parole (delle minutaglie); un’altra tabella del database che immagazzina le corrispondenze tra le vere e proprie parole e questi numeri; questo metodo permette di accelerare le ricerche negli indici (per il software è più rapido ricercare numeri invece che parole).
È importante notare soprattutto che la dimensione degli indici è molto grande. Su uZine, per esempio, la parte del database dedicato all’immagazzinamento degli articoli pesa 9,7 Mb. La parte che immagazzina l’indice corrispondente agli articoli pesa 10,5 Mb. E la parte che immagazzina la corrispondenza tra le parole e la loro traduzione in numeri 4,1 Mb. Perciò, se un sito ha 9,7 Mb di articoli, la sola l’indicizzazione di questi articoli ammonta a quasi 14,6 Mb. Lo spazio necessario per questi articoli e per la ricerca è quindi più che raddoppiato rispetto alla dimensione del sito. Questo è uno dei motivi, in particolare, per i quali si preferisce disattivare il motore di ricerca se si hanno vincoli importanti riguardo al proprio hosting.
Quali parole vengono indicizzate?
Abbiamo già visto che vengono estratte tutte le parole di tutti gli elementi del contenuto del sito, e poi analizzate (per ponderazione). Tuttavia, SPIP non memorizza tutte le parole.
- I codici HTML sono esclusi dall’indicizzazione. Ciò è di evidente necessità al fine di ottenere ricerche "pulite"...
- Le parole di meno di 4 lettere non sono memorizzate (in realtà, di meno di 3 lettere, ma le parole di 3 lettere non sono attualmente sfruttate realmente durante le ricerche). Questo punto solleva numerose domande da parte degli utenti...
Il problema è ottenere risultati più pertinenti possibili. Quindi è necessario privilegiare, nelle ricerche, le parole veramente importanti nel senso della ricerca. Per esempio, se si cercano le parole il gatto, la parola significativa è gatto e non il...
Riprendiamo il nostro primo esempio (con tre articoli costituiti ognuno da una frase). Se si fossero indicizzate tutte le parole, avremmo avuto le parole:
- il: 1, 2
- è : 1, 2
- ...
Cercando le parole il freddo è dannoso, troveremmo le voci:
- il: 1, 2
- freddo: 1,3
- è: 1, 2
- dannoso: non presente.
Aggiungendo i risultati di queste parole per ogni articolo (in realtà, la ponderazione di ogni articolo, ma per il nostro esempio consideriamo che ogni parola ha una ponderazione di un solo punto), si otterrebbe:
- articolo 1: 3 parole
- articolo 2: 2 parole
- articolo 3: 1 parola.
L’ordinamento metterebbe in testa l’articolo 1, poi l’articolo 2, poi l’articolo 3. Ora, l’articolo 2 non parla del freddo, contrariamente all’articolo 3. A causa dell’utilizzo delle parole senza importanza per il senso (il, è), l’ordinamento sarà errato.
Da ciò nasce la necessità di non tener conto, durante l’indicizzazione, delle parole che non rientrano nel senso della ricerca. Il metodo più pulito consiste nel fornire al sistema un elenco di parole da non indicizzare; tuttavia, ciò richiede un lavoro enorme, ovvero la costituzione di dizionari di esclusione (e farlo per tutte le lingue)... Quindi, più semplicemente, in SPIP noi scegliamo di considerare che le parole di tre lettere e meno non sono "importanti"; è evidente che vi sono delle troncature perché parole quali Val, Mar, sud... non sono più considerate; è quindi un compromesso, che si giudica sull’efficacia delle ricerche (che sono globalmente di buona qualità).
N.B. Dalla versione 1.6 di SPIP, le sigle di due e più lettere, comprese quelle contenenti cifre (G8, CNT, PHP, ONU...), vengono indicizzate. Una sigla è una parola che non ha nessuna lettera minuscola.
Quando avviene l’indicizzazione?
L’indicizzazione avviene in tre momenti differenti:
- quando si convalida un articolo esso viene indicizzato immediatamente;
- quando si modifica un articolo già pubblicato esso viene indicizzato nuovamente;
- durante la visita al sito pubblico, se un elemento accessibile al pubblico non è indicizzato (per esempio, quando si sono appena cancellati i dati di indicizzazione dall’area riservata, o quando si è appena rispristinato un backup del proprio sito - gli indici non vengono salvati -, oppure se è stato attivato il motore di ricerca dopo aver già pubblicato articoli), esso viene indicizzato (in background).
Ricordate che l’operazione di indicizzazione è relativamente pesante: essa richiede numerosi calcoli (calcoli poco complessi, ma effettuati sut tutte le parole dell’articolo), e provoca numerose chiamate al database. Anche qui, se si ha un hosting molto lento (veramente molto lento!), potrebbe essere preferibile disattivare il motore di ricerca.
Ricordate anche che, se si attiva il motore dopo aver già pubblicato articoli questi non vengono indicizzati immediatamente: la loro indicizzazione sarà provocata dalle visite sulla parte pubblica del sito. Su un sito grande ciò può prendere un certo tempo.
La ricerca
Poiché tutti i documenti sono indicizzati è oramai possibile effettuare delle ricerche.
Se si cerca una sola parola...
SPIP consulta l’indice e trova la voce corrispondente a questa parola. Per la parola gatto, noi avevamo trovato gli articoli X e Y. Inoltre, SPIP ottiene il numero di punti attribuiti a questa parola per ogni articolo (22 punti per X e 27 punti per Y). Possiamo quindi ordinare i nostri risultati: l’articolo Y, poi l’articolo X.
Se si cercano più parole...
SPIP non autorizza le costruzioni del tipo "AND", "OR", non funziona con questo principio.
Quando si cercano più parole, SPIP effettua l’operazione di ricerca per ogni parola, ottiene i punti di ogni articolo (o breve, o rubrica, ecc.), e addiziona questi punti.
Per esempio, cerchiamo le parole gatto, grosso, casa. Per ogni parola si ottengono i seguenti risultati:
- gatto: articolo X (22 punti), articolo Y (27 points),
- grosso: articolo X (12 punti), articolo Y (2 punti), articolo Z (5 punti),
- casa: articolo Y (3 punti), articolo Z (17 punti).
SPIP fa l’addizione di tutti questi punti per ogni articolo:
- articolo X: 22 + 12 = 34 punti,
- articolo Y: 27 + 2 + 3 = 32 punti,
- articolo Z: 5 + 17 = 22 punti.
L’ordinamento degli articoli per la ricerca gatto, grosso, casa, è: articolo X, poi articolo Y, poi articolo Z. (Nei modelli è anche possibile richiedere la visualizzazione dei punti di ogni risultato grazie al segnaposto #POINTS
.)
Quindi, questa ricerca non è del tipo "AND" né "OR", ma un’addizione di punti. E alla prova pratica si dimostra piuttosto efficace (si trova quel che si cerca, che è poi lo scopo di un motore di ricerca...).