Principe
Il y a deux grandes façons de faire un moteur de recherche. La première est de chercher tout bêtement dans le type de stockage existant (fichiers HTML, base de données... selon le type de site). La seconde consiste à indexer les contenus dans la base de données. La solution de l’indexation a été retenue jusqu’à SPIP 2.0. A partir de SPIP 3.0, on recherche directement les contenus sans effecter d’indexation au préalable.
D’autre part, dans le cas de SPIP, nous sommes obligés d’utiliser PHP et MySQL comme pour le reste du logiciel, ce qui ne permet pas de réaliser un moteur très performant, en termes de rapidité, mais aussi de pertinence ou d’enrichissements divers (indexation de documents extérieurs au site, création de champs sémantiques permettant de proposer des recherches plus fines, etc.).
L’avantage du moteur interne, cependant, c’est qu’il permet de gérer l’affichage des résultats à travers les mêmes méthodes (squelettes) que le reste des pages de SPIP, et à l’intérieur du même environnement visuel.
La recherche
La recherche s’effectue simplement en séparant le texte de recherche en ses différents mots ; le même filtre est appliqué que lors de l’indexation : suppression des mots de trois lettres ou moins (sauf sigles), et translittération.
Pour chaque contenu recherché, le score des différents mots est ensuite récupéré puis additionné afin d’obtenir le score total. Enfin, les résultats sont en général affichés par ordre décroissant de score {!par points}
, c’est-à-dire de pertinence (mais cela est laissé à la volonté de la personne qui écrit les squelettes de mise en page).
La recherche n’offre pas d’opérateurs booléens, l’opérateur implicite étant grosso modo un « OU » logique. Cependant, les articles trouvés s’affichent dans un ordre qui privilégie les résultats contenant le plus de mots orthographiés précisément selon la requête. Ainsi, une requête sur « la main rouge » mettra en évidence les articles contenant « main » et « rouge », loin devant les articles ne contenant que « maintenance » ou « rouget » - ceux-ci apparaîtront, mais plus loin dans le classement.
Le moteur de recherche n’indexe pas non plus le contenu des fichiers ajoutés aux articles.
Moteur de recherche avancé
Le moteur de recherche fourni par défaut est assez limité. Heureusement il existe des alternatives pour fournir une meilleure recherche :