Indexer : Indexation

Introduction

Cette page vise à documenter les paramètres de l’indexation dans le plugin Indexer, qui exploite le moteur de recherche Sphinx.

Schéma de base

Sphinx permet de configurer son indexation comme on le souhaite, mais le plugin Indexer pour SPIP fait des choix particuliers — relativement génériques et extensibles, qui permettent aux développeurses d’avoir un socle commun. C’est le schéma de base suivant :

  • title : le titre de document
  • summary : résumé (le plus souvent les premières lignes du contenu, ou le résultat de #INTRODUCTION)
  • content : le contenu intégral du texte, y compris les champs chapo, texte, ps, et le titre des mots-clés
  • date : la date de rédaction antérieure si elle existe, sinon la date de publication, sinon la date d’indexation
  • uri : l’adresse de la page
  • properties
  • signature

properties est un objet au format JSON, comportant les éléments suivants :

  • authors : liste des auteurs de l’article
  • tags : liste des mots clés de l’article
  • objet : 'article' (type d’objet SPIP)
  • id_objet : identifiant de l’objet
  • lang : langue de l’objet.

signature : est une signature calculée automatiquement à partir des contenus envoyés et du secret du site. Cette signature pourrait être recalculée pour vérifier que les données dans Sphinx n’ont pas été altérées.

Pipeline indexer_document

Les choix faits dans ce plugin correspondent à une idée de « ce qu’il faut faire dans le cas assez général », mais ça ne convient pas forcément à tous les sites. Vous pouvez bien sûr participer au développement de ce plugin pour le faire évoluer. Mais si votre cas est très particulier ou en contradiction avec nos choix, il est aussi possible d’utiliser le pipeline indexer_document pour modifier les données envoyées à Sphinx.

Si par exemple vous ajoutez une propriété note, il suffira dans ce pipeline d’indiquer :
$flux['data']->properties['note'] = calculer_la_note_de_mon_article($flux['data']->properties['id_objet']);

La note sera alors disponible sous forme de filtre et de facette (à condition bien sûr de modifier la Boucle SPHINX à cet effet).

Encore une fois, si le besoin d’indexer des champs supplémentaires s’avère récurrent, il vaut mieux venir modifier le plugin Indexer de façon à ce que l’indexation de champs supplémentaires se fasse simplement par l’ajout d’une define() ou d’une case à cocher dans l’espace privé.

Indexation par groupe de mots

Si l’on a par exemple des mots-clés "pays" et des mots-clés "thèmes", on veut pouvoir afficher des facettes de pays et de thèmes séparément, plutôt qu’un seul groupe de facettes "tags".

Pour cela les mots sont présents à la fois « tout mélangés » dans la propriété properties.tag, mais aussi organisés par groupes dans properties.tagsbygroups (basés sur l’id_groupe, identifiant numérique des groupes de mots), et dans properties.tagsbytype (basés sur le titre des groupes de mots).

Indexation des langues et liens de traduction

Les traductions d’un article sont disponibles dans properties.trad, qui fournit une liste de traductions (à l’exception de l’objet lui-même). properties.tradlangs contient pour sa part uniquement la liste des langues dans lesquelles l’article est traduit, ce qui permet de filtrer sur « les articles en français dont il existe une traduction en anglais » : avec &language=fr&langtrads=en.

Pour des raisons de simplicité, ces liens sont indexés indépendamment du statut des articles traduits, si vous les exploitez de façon massive il faut donc faire un peu attention à la manière dont ils sont restitués dans les boucles.

Rubriques et Mots-clés arborescents

Le plugin Indexer est utilisé sur des sites dont le volume est assez important, et qui utilisent plusieurs sites SPIP, dotés d’une arborescence similaire en terme de titres de rubriques et de mots-clés, mais pas forcément selon les mêmes identifiants (id_rubrique). C’est pourquoi l’indexation prévoit d’enregistrer les mots sous forme de « tags » très simples (titre du mot), ainsi que sous la forme d’une empreinte md5 complexe de toute l’aborescence, qui permet de retrouver une même arborescence à travers diverses indexations.

Si le plugin « groupes de mots arborescents » est présent, les arborescences de mots-clés sont aussi pris en compte.

Indexation de la date

Pour des raisons techniques expliquées ici la date indexée doit être comprise entre le 1er janvier 1970 et 2064. On peut inclure des dates antérieures (de 1901 à 1970) en faisant très attention. Si l’on veut avoir une plage de dates sans limitations il va falloir encore réfléchir à la méthode.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom