Recherche

Accueil / Recherche / L’indexation dans SPIP

Le principe est le suivant : prendre un texte (plus ou moins long), en extraire tous les mots, et noter chacun de ces mots dans une base de données, en faisant correspondre ce mot à l’endroit où il se trouve.

Par exemple, notre site a trois articles, dont les textes (très courts) sont :
- article 1 : « Le petit chat est mort de froid et de faim. »
- article 2 : « Le gros chat est rentré à la maison. »
- article 3 : « La maison résiste au froid. »

Nous allons extraire les mots de chaque article, et enregistrer pour chaque mot à quel article il correspond (nous ne prendrons que les mots de plus de trois lettres, nous expliquerons plus loin pourquoi) :
- petit : 1
- chat : 1, 2
- mort : 1
- froid : 1, 3
- faim : 1
- gros : 1
- rentré : 2
- maison : 2, 3
- résiste : 3

Et ainsi de suite, en considérant que notre site est certainement beaucoup plus gros, et les articles beaucoup plus long.

Si l’on recherche le mot chat :
- une solution sans indexation consisterait à relire tous les articles, pour y trouver le mot chat ; sur un gros site, même pour un ordinateur, cela prend beaucoup de temps ;
- puisque nous avons un index, il suffit de consulter l’entrée chat : on sait immédiatement qu’il se trouve dans les articles 1 et 2.

La pondération

À l’indexation s’ajoute un deuxième principe : la pondération. Il s’agit d’essayer de rendre le moteur plus pertinent. Par exemple, si un mot apparaît dans le titre d’un article, et dans le corps du texte d’un autre article, on considère que si l’on recherche ce mot, il faut en premier indiquer celui où il apparaît dans le titre. De plus, si un mot apparaît 25 fois dans un article, et seulement deux fois dans un autre, on veut afficher en premier l’article où le mot est le plus fréquent.

On voit que l’indexation simple ne suffit pas. Si on recherche chat, on trouvera les articles où il apparaît, mais sans pouvoir ensuite classer ces articles entre eux (selon que le mot chat apparaît une fois ou 20 fois, ou s’il se trouve dans le titre ou seulement dans le texte...).

Le moteur va donc calculer une pondération pour chaque mot dans chaque article. C’est-à-dire donner des points à ce mot en fonction de l’endroit où il se trouve, et du nombre de fois où il apparaît :

dans le titre 8 points
dans le soustitre 5 points
dans le surtitre 5 points
dans le chapo 3 points
dans le texte 1 point
dans le post-scriptum 1 point

Si le mot apparaît plusieurs fois, on additionne les occurences.

Par exemple, si dans un article, le mot chat apparaît :
- une fois dans le titre : 8 points
- deux fois dans le chapo : 2 fois 3 = 6 points
- six fois dans le texte : 6 fois 1 = 6 points
- total : 8 + 6 + 6 = 20 points.

Le mot chat, dans l’index, est donc ainsi enregistré :
- chat, dans l’article numéro X, 20 points ;
- chat, dans l’article numéro Y, 15 points ;
- ...

Si l’on recherche le mot chat, grâce à l’index, on saura donc qu’il se trouve dans les articles X et Y, et de plus on peut classer ces articles entre eux : 20 points dans X, 15 points dans Y, donc on considère que l’article X répond mieux à la recherche.

La recherche

Puisque tous les documents sont indexés, on peut désormais effectuer des recherches.

Si vous recherchez un seul mot...

Le moteur va consulter l’index, et trouver l’entrée correspond à ce mot. Pour le mot chat, nous avions trouvé les articles X et Y. Le moteur va de plus récupérer le nombre de points attribués à ce mot pour chaque article (22 points dans X, et 27 points pour Y). On peut donc classer nos résultats : l’article Y, puis l’article X.

Si vous recherchez plusieurs mots...

SPIP n’autorise pas les constructions du type « ET », « OU », il ne fonctionne pas de cette manière.

Lorsque vous recherches plusieurs mots, le moteur va effectuer l’opération de recherche pour chaque mot, récupérer les points de chaque article et ajouter ces points.

Recherchons par exemple les mots chat, gros, maison. On obtient les résultats suivants pour chaque mot :
- chat : article X (22 points), article Y (27 points),
- gros : article X (12 points), article Y (2 points), article Z (5 points),
- maison : article Y (3 points), article Z (17 points).

SPIP fait l’addition de tous ces points pour chaque article :
- article X : 22 + 12 = 34 points,
- article Y : 27 + 2 + 3 = 32 points,
- article Z : 5 + 17 = 22 points.

Le classement des articles, pour la recherche chat, gros, maison, est : article X, puis article Y, puis article Z.

Ca n’est donc pas une recherche de type « ET » ni « OU », c’est une addition de points. Et à l’usage, cela se montre plutôt efficace (on trouve ce que l’on cherche, ce qui est bien le but d’un moteur...).