Rechercher dans un site SPIP

Pour chercher des pages dans le site, SPIP dispose d’un système de mots-clés, et d’un moteur natif, dont le formulaire de recherche est intégré dans les squelettes standards de Squelettes de la "dist".

Celui-ci utilise une recherche textuelle "plain text", cumulant pour chaque mot trouvé des points par occurrence dans les articles...
(ce qui n’a rien à voir avec la "recherche par mots-clé")

Diverses personnalisations et extensions sont facilement disponibles, y compris l’accès au contenu des documents joints.

Article publié le 13 avril 2013, et actualisé en juin 2015

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Attention, cette page est encore en    

Alors que le mot-clé sert essentiellement à "fixer" des liens de navigation transversale (du genre "Voir aussi" dans les squelettes de Squelettes de la "dist"), la recherche textuelle utilise le corpus existant contenu dans le site sans manipulations complémentaires [1]

 Utiliser le moteur de recherche

SPIP intègre un moteur de recherche, permettant la saisie d’un texte, et proposant une page d’affichage des résultats correspondant à ce critère : plus précisément, vous disposez de Balises de FORMULAIRES, justement #FORMULAIRE_RECHERCHE à utiliser dans vos squelettes ; si l’utilisateur entre un texte dans ce champ, le clic de validation va activer une page de squelette (le squelette recherche.html) comprenant des boucles sur les objets cherchés, utilisant le critère {recherche} pour restreindre les objets à afficher contenant les mots identifiés d’après la chaine saisie, affichable dans la balise #RECHERCHE...

Cette construction est nettement apparente dans la boucle ci-dessous (extrait du squelette de Squelettes de la "dist")

  1.                         [<div class="cartouche">
  2.                                 <h1><:resultats_recherche:></h1>
  3.                                 <p class="soustitre">&#171;&nbsp;(#RECHERCHE)&nbsp;&#187;</p>
  4.                         </div>]
  5.                        
  6.                         [(#REM) Articles trouves ]
  7.                         <B_articles>
  8.  
  9.                                 <h2><:articles:></h2>
  10.  
  11.                                         <BOUCLE_articles(ARTICLES) {recherche} {!par points} >
  12.                                         <li><a href="#URL_ARTICLE">#TITRE</a></li>
  13.                                         </BOUCLE_articles>
  14.  
  15.                         </B_articles>

 Comprendre le moteur

En deux mots, à chaque création d’article, SPIP parcourt le texte de l’article (et tous ses champs) pour compatibilité le nombre d’apparition de tous les termes [2], qui pourront ultérieurement servir de renvoi vers l’article ; le formulaire de recherche faisant partie des squelettes standards [3] propose alors d’afficher les réponses fondées sur les Objets éditoriaux comportant le plus de points d’occurrences...

 Améliorer la recherche

- Le plugin FULLTEXT permet d’une part d’exploiter le mode de recherche FULLTEXT de MySQL et d’améliorer ainsi énormément les recherches par rapport au fonctionnement natif de SPIP [4], et d’autre part d’indexer le contenu de certains documents joints ; l’extension de ses possibilités à d’autres formats dépend de bibliothèques complémentaires sur le serveur...

De nombreuses contributions apportent des solutions complémentaires, comme une recherche multi-critère, ou en prenant en compte des mots-clés....

 Etendre les objets recherchés

L’écran standard de réponse -nous avons dit qu’il correspond au squelette recherche- ne contient dans Squelettes de la "dist", que des boucles portant sur les objets éditoriaux natifs dans SPIP :articles,rubriques, etc.....(ci-dessous un extrait complet)

  1.                        
  2.                         [(#REM) Rubriques trouvees ]
  3.                         <B_rubriques>
  4.                         <div class="menu menu_rubriques">
  5.                                 #ANCRE_PAGINATION
  6.                                 <h2><:rubriques:> (#GRAND_TOTAL)</h2>
  7.                                 <ul class="spip">
  8.                                         <BOUCLE_rubriques(RUBRIQUES) {recherche} {!par points} {pagination 5}>
  9.                                         <li><a href="#URL_RUBRIQUE">#TITRE</a></li>
  10.                                         </BOUCLE_rubriques>
  11.                                 </ul>
  12.                                 [<p class="pagination">(#PAGINATION)</p>]
  13.                         </div>
  14.                         </B_rubriques> 

Si vous souhaitiez étendre la recherche a de nouveaux objets, il suffit d’adjoindre une nouvelle boucle sur le même modèle, mais portant sur d’autres tables.

Par exemple, pour rechercher sur le titre des documents (comme dans l’espace privé), rajoutez dans une copie en ./squelettes/recherche.html [5] :

  1.   [(#REM) Documents trouves ]
  2.                        <B_documents>
  3.                        <div class="menu menu_documents">
  4.                                #ANCRE_PAGINATION
  5.                                <h2><:documents:> (#GRAND_TOTAL)</h2>
  6.                                <ul class="spip">
  7.                                        <BOUCLE_documents(DOCUMENTS) {recherche} {!par points} {pagination}>
  8.                                        <li><a href="#URL_DOCUMENTS">#TITRE</a></li>
  9.                                        </BOUCLE_documents>
  10.                                </ul>
  11.                                [<p class="pagination">(#PAGINATION)</p>]
  12.                        </div>
  13.                        </B_documents>

Télécharger

Nota Bene : la recherche s’effectue alors sur les champs de la table DOCUMENTS [6], mais pas dans les documents ; pour cet ultime niveau d’exploration, il faut utiliser le plugin FullText, avec des exécutables complémentaires chargés sur le serveur pour exploer le contenu des fichiers joints dans ./IMG/.

 Votre propre utilisation de recherche

Si vous pouvez utiliser la recherche standard dans l’espace public (activée par le #FORMULAIRE_RECHERCHE ), vous pouvez de fait utiliser cette spécification dans toute boucle que vous écrirez, en rajoutant le critère optionnel {recherche ?} : celui-ci introduit un filtre supplémentaire dans votre résultat sélectionné, sur le texte introduit.

Vous pouvez également renvoyer le soin d’afficher les résultats à un squelette spécifique xxx, en passant l’URL-page de squelette voulu (avec paramètre),en argument de la balise #FORMULAIRE_RECHERCHE{#URL_PAGE{xxx}}

Encore plus spécifique, vous pourriez même utiliser une seconde balise #FORMULAIRE_RECHERCHE_PRIVE [7]... ce qui permet de mettre facilement deux modes de recherche dans une page ou un squelette du public !

 Et des extensions en plugins ?

Enfin signalons un plugin FullText dédié à l’utilisation étendue des moteurs de recherche intégrés au moteur de SGBD, proposant même un nouveau filtre fulltext_recherche_naturelle_fr, pour améliorer les chaines de texte effectivement recherchées en tenant compte de certaines subtilités de la langue française..


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1Voir aussi les options du plugin Glossaire intégrées dans le CouteauSuissehttps://contrib.spip.n...], sans oublier le raccourci typo d’utilisation directe de Wikipedia.

[2Mots de plus de trois lettres.

[3Voir Quel squelette modifier ? pour une nomenclature complète.

[4en permettant aussi une ré-indexation manuelle

[5Il serait plus utile de l’ajouter sous forme d’une noisette : par un #INCLURE{fond=inc-documents-titre,env}.

[6Il est donc important de remplir les champs descriptifs de chaque document (cf. Médiathèque) pour btenir de bons résultats en recherche !

[7Ce formulaire distinct évite les conflits en se différenciant du précédent (comme dans l’espace privé), tout en alimentant le même critère..


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 13 avril 2013, et actualisé en juin 2015 Provisoire (à compléter...) .

Répondre à cet article