Com funciona el motor de cerca d’SPIP?

El motor de cerca integrat a l’SPIP és molt simple d’utilitzar i, no obstant, relativament potent. Tot i que la majoria d’usuaris no té cap raó per a demanar-se «com funciona?», tenim molts correus que demanen puntualitzacions sobre el seu funcionament...

Aquí hi trobareu els principis en els que es basa el motor de cerca d’SPIP.

Amb la finalitat de ser ràpid i eficaç (és a dir, per tal que doni respostes apropiades), el motor d’SPIP fa servir un sistema d’indexació dels continguts. La indexació consisteix en analitzar tots els texts continguts a l’SPIP, a extreure’n totes les paraules, i a salvaguardar per a cada paraula l’indret on apareix.

De la mateixa manera que l’índex d’un llibre ens mostra les paraules importants del llibre, seguides dels números de les pàgines on trobar-les, l’índex del motor de cerca fa correspondre per a cadascuna de les paraules utilitzades en el lloc Web el número de l’article, de la breu... on trobar-la.

Més tard, quan es fa servir el motor per fer una cerca, SPIP no té cap necessitat de consultar el conjunt dels texts del lloc Web, sinó que en té prou anant a consultar l’índex per saber on es troben aquestes paraules. D’aquesta manera es guanya molt temps (i com més gran sigui el lloc Web, més temps es guanya).

La indexació

El principi és, per tant, el següent: agafar un text (més o menys llarg), extreure’n totes les paraules, i anotar cadascuna d’aquestes paraules en una base de dades, fent correspondre aquesta paraula amb l’indret on es troba.

Per exemple, tenim un lloc Web amb tres articles, els texts dels quals (molt curts) són:
-  article 1: «La vaca petita ha mort de fred i gana.»
-  article 2: «La vaca gran ha entrat a la granja.»
-  article 3: «La granja resisteix al fred.»

Anem a extreure les paraules de cada article, i a gravar per cada paraula a quin article correspon (només agafarem paraules que tinguin més de tres lletres, més endavant explicarem el perquè):
-  petita: 1
-  vaca: 1, 2
-  mort: 1
-  fred: 1, 3
-  gana: 1
-  gran: 2
-  entrat: 2
-  granja: 2, 3
-  resisteix: 3

I així successivament, considerant que el nostre lloc Web és certament molt més gran, i els articles molt més llargs.

Si es busca la paraula vaca:
-  una solució sense indexació consistiria en tornar a llegir tots els articles per tal de trobar-hi la paraula vaca; en un lloc Web gran, fins i tot per un ordinador, això ens demanaria molt temps;
-  com que tenim un índex, en tenim prou consultant l’entrada vaca: immediatament sabem que es troba en els articles 1 i 2.

La ponderació

A la indexació s’hi afegeix un segon principi: la ponderació. Es tracta d’intentar que el motor es torni més pertinent. Per exemple, si una paraula apareix al títol d’un article, i al cos del text d’un altre article. Es considera que, quan es cerca aquesta paraula, es necessari mostrar en primer lloc l’article on aquella paraula apareix al títol. A més, si una paraula es troba 25 vegades en un article, i només dues vegades en un altre, volem mostrar primer l’article en el que la paraula és més freqüent.

Com podem veure amb la indexació simple no en tenim prou. Si busquem vaca, trobarem els articles on apareix, però sense que després puguem classificar aquests articles entre ells (segons si la paraula vaca apareix un cop o 20, o si es troba al títol o només al cos del text...).

Per això, SPIP calcularà una ponderació per a cadascuna de les paraules de cada article. És a dir, donarà uns punts a aquesta paraula en funció de l’indret on es troba i del número de vegades que apareix:

al títol 8 punts
al subtítol 5 punts
al sobretítol 5 punts
a la descripció 4 punts
a l’encapçalament 3 punts
a l’interior del text 1 punt
a la postdata 1 punt

Si la paraula es troba diverses vegades, es sumen les ocurrències.

Per exemple, si en un article, la paraula vaca es troba:
-  un cop al títol: 8 punts
-  dos cops a la descripció: 2 cops 4 = 8 punts
-  sis cops a l’interior del text: 6 cops 1 = 6 punts
-  total: 8 + 8 + 6 = 22 punts.

Llavors, la paraula vaca, a l’índex, s’enregistra d’aquesta manera:
-  vaca, a l’article número X, 22 punts;
-  vaca, a l’article número Y, 15 punts;
-  ...

Si es busca la paraula vaca, gràcies a l’índex, sabrem que es troba als articles X i Y, i a més es poden classificar aquests articles entre sí: 22 punts a X, 15 punts a Y. Per tant, considerarem que l’article X respon millor a la cerca.

Les paraules clau: molts usuaris confonen les paraules clau i la indexació. Les paraules clau no tenen, per naturalesa, cap relació amb la indexació: quan SPIP fa una cerca, no busca les paraules clau associades als articles (que seria molt limitat), cerca a l’índex que ha fabricat a partir del text exacte dels articles. Per tant, en el mateix principi de la indexació, les paraules clau no hi intervenen de cap de les maneres.

En canvi, les paraules clau si que es fan servir per fabricar la ponderació dels articles. Si hi ha una paraula clau associada a un article, aquesta entra llavors a la indexació del mateix article, amb una forta ponderació (12 punts pel nom de paraula clau, 3 punts per la seva descripció). D’aquesta manera, si el nostre article Y (15 punts si només tenim en compte el seu contingut) està associat a la paraula clau vaca (perquè amb aquesta paraula indiquem que és l’assumpte d’aquest article), hem d’afegir a la indexació d’aquest article, per la paraula vaca, els 12 punts de la paraula clau: total 27 punts. A la nostra cerca sobre vaca, l’article Y avantatja a partir d’ara l’article X.

Fixem-nos, finalment, que tots els elements del contingut d’SPIP són també objecte d’una indexació: els articles, les breus, les seccions, els autors, les paraules clau, els llocs referenciats (si el lloc Web és una sindicació, els títols dels articles recuperats en aquest lloc Web són també indexats).

On s’emmagatzema?

Les dades de la indexació són emmagatzemats directament a la base de dades. Aquesta part és una mica tècnica, per tant no ens allargarem massa sobre tot aquest assumpte.

Sapigueu que hi ha diversos índex (llistes de paraules), que corresponen cadascun d’ells a un tipus de contingut (un índex pels articles, un índex per les seccions, un índex per les breus...). A més, contràriament a l’explicació feta més amunt, on les entrades de l’índex són les paraules, a l’SPIP les entrades dels índex són números calculats a partir d’aquestes paraules (hashos); per una altra banda, una altra taula de la base de dades emmagatzema les correspondències entre les veritables paraules i aquests números; aquest mètode permet accelerar les cerques als índex (pel programa es més fàcil buscar números que paraules).

Fixem-nos sobretot en que la mida dels índexs és molt important. A uZine, per exemple, la part de la base de dades dedicada a emmagatzemar els articles pesa 9,7 MB. La part que emmagatzema l’índex corresponent als articles pesa 10,5 MB. I la part que emmagatzema la correspondència entre les paraules i la seva traducció en números 4,1 MB. D’aquesta manera, per un lloc Web que té uns articles que ocupen 9,7 MB, la indexació d’aquests articles representa, ella sola, prop de 14,6 MB. Per tant, l’espai necessari per aquests articles i la cerca és de més del doble de l’espai que ocupa el lloc Web. Particularment, aquesta és una de les raons per les que es pot preferir desactivar el motor de cerca, si es tenen importants limitacions en l’allotjament Web.

Quines paraules s’indexen?

Ja ho hem vist, totes les paraules de tots els elements de contingut del lloc Web s’extreuen i després s’analitzen (per ponderació). No obstant, l’SPIP no retindrà totes les paraules.

-  Els codis HTML són exclosos de la indexació. Això és evidentment necessari per obtenir cerques «netes»...

-  Les paraules de menys de 4 lletres no són retingudes (en realitat, de menys de 3 lletres, però les paraules de 3 lletres, de moment, no són utilitzades realment en les consultes). Aquest punt suscita moltes preguntes per part dels usuaris...

El problema és obtenir resultats tan pertinents com sigui possible. Per tant, és necessari privilegiar aquelles paraules que són realment important en el sentit de la cerca. Per exemple, si es busquen les paraules la vaca, la paraula important és vaca, i no la...

Recuperem el nostre primer exemple (amb tres articles formats cadascun per una frase). Si s’haguessin indexat totes les paraules, tindríem guardades les paraules:
-  la: 1, 2, 3
-  ha: 1, 2
-  de: 1
-  ...

Buscant les paraules el fred ha començat, trobaríem les entrades:
-  el: enlloc
-  fred: 1,3
-  ha: 1, 2
-  començat: enlloc.

Afegint els resultats d’aquestes paraules per cadascun dels articles (en realitat, la ponderació de cada article, però pel nostre exemple considerarem que cada paraula té una ponderació d’un sol punt), obtindríem:
-  article 1: 2 paraules
-  article 2: 1 paraula
-  article 3: 1 paraula.

La classificació posaria al capdamunt de tot l’article 1, després el 2 i després el 3. Però l’article 2 no fa cap referència al fred, contràriament a l’article 3. Com a conseqüència de l’ús de les paraules sense importància pel sentit (el, ha, de), la classificació s’ha falsejat.

D’aquí que tinguem la necessitat, en l’indexació, de no tenir en compte les paraules que no formen part del sentit de la cerca. El mètode més net consisteix en donar-li al sistema una llista de les paraules que no s’han d’indexar; no obstant, això suposa una feinada molt gran, és a dir la constitució de diccionaris d’exclusió (i això per a totes les llengües)... Per tant, de forma més simple, a l’SPIP hem escollit considerar que les paraules de tres o menys lletres no són «importants»; evidentment, hi ha errors, ja que paraules com gat, gos, mar... no es tenen en compte; per tant, és un compromís que es jutja per l’eficàcia de les cerques (que són globalment de bona qualitat).

N.B. A partir de la versió 1.6 de l’SPIP, les sigles de dues o més lletres, incloent-hi aquelles que puguin contenir xifres (G8, CNT, PHP, ONU...), són indexades. Una sigla és una paraula que no té cap minúscula.

En quin moment es fa la indexació?

La indexació es realitza en tres moments diferents:

-  quan es valida un article, aquest s’indexa immediatament;

-  quan es modifica un article ja publicat, s’indexa altre cop;

-  durant la visita del lloc públic, si un element accessible al públic no està indexat (per exemple, quan acabeu d’esborrar les dades d’indexació des de l’espai privat, o quan acabeu de recuperar una còpia de seguretat del vostre lloc Web - els índex no es guarden -, o si heu activat el motor de cerca després d’haver publicat ja articles), llavors s’indexa (com a tasca en segon pla).

Reteniu que la operació d’indexació és relativament pesada: demana nombrosos càlculs (càlculs poc complexes, però efectuats sobre totes les paraules de l’article), i provoca nombroses crides a la base de dades. Aquí també, si l’hostatjador és molt lent (veritablement molt lent!), pot ser preferible desactivar el motor de cerca.

Reteniu igualment que, si activeu el motor després d’haver publicat ja articles, aquests no seran indexats immediatament: seran les visites al lloc públic les que provocaran la seva indexació. En un lloc Web molt gran, això pot suposar un cert temps.

La cerca

Quan tots els documents estiguin indexats, podem a partir d’aleshores fer cerques.

Si cerqueu una sola paraula...

L’SPIP consultarà l’índex, i trobarà l’entrada corresponent a aquesta paraula. Per la paraula vaca, havíem trobat els articles X i Y. L’SPIP recuperarà, a més, els punts atribuïts a aquesta paraula per cada article (22 punts a X, i 27 punts a Y). Per tant, podem classificar els nostres resultats: l’article Y, i després l’article X.

Si cerqueu diverses paraules...

L’SPIP no autoritza les construccions del tipus «I», «O», no funciona d’aquesta manera.

Quan es cerquen diverses paraules, l’SPIP fa l’operació de cerca per a cadascuna de les paraules, recupera els punts de cada article (o breu, o secció, etc.), i afegeix aquests punts.

Busquem, per exemple, les paraules vaca, gran, granja. S’obtenen els resultats següents per a cadascuna de les paraules:
-  vaca: article X (22 punts), article Y (27 punts),
-  gran: article X (12 punts), article Y (2 punts), article Z (5 punts),
-  granja: article Y (3 punts), article Z (17 punts).

L’SPIP fa la suma de tots aquests punts per a cadascun dels articles:
-  article X: 22 + 12 = 34 punts,
-  article Y: 27 + 2 + 3 = 32 punts,
-  article Z: 5 + 17 = 22 punts.

La classificació dels articles, per la cerca vaca, gran, granja, és: article X, després article Y, i després article Z. (A més a més, és pot demanar a l’esquelet que es mostrin els punts de cada resultat gràcies a l’etiqueta #POINTS, veure l’article «Els bucles i etiquetes de cerca».)

Per tant no és una cerca del tipus «I» ni «O», sinó una suma de punts. I amb l’ús, resulta cada sobretot eficaç (es troba tot allò que es busca, que és precisament l’objectiu d’un motor de cerca...).

Autor merce Publié le : Mis à jour : 26/10/12

Traductions : català, English, Español, français, italiano, Nederlands