Base de Connaissances GLPI : Comment la Créer et Mobiliser l'Équipe

Guide technique de la base de connaissances GLPI : taxonomie sobre, le piège de visibilité qui fait disparaître les articles, le réglage innodb_ft_min_token_size qui corrige la recherche de sigles, une matrice de FAQ publique et le KPI d'adhésion qui réduit vraiment les tickets - avec les requêtes que NexTool exécute en maintenance.

Le savoir qui vit dans la tête d'un technicien meurt lorsqu'il part - mais une base de connaissances mal configurée est pire : elle ressemble à de la documentation et ne renvoie aucun résultat. Dans la maintenance de parcs GLPI pour des clients, les deux échecs les plus fréquents sont les articles que personne ne trouve (problème de configuration) et les articles que personne n'écrit (problème d'adhésion). Ce guide traite les deux, avec les requêtes et les réglages que nous exécutons sur le terrain.

Concevez la taxonomie avant le premier article

La base de connaissances de GLPI est native (table glpi_knowbaseitems) et propose déjà des catégories, une FAQ, la recherche plein texte, le contrôle de visibilité, l'historique des révisions et le lien vers les tickets. L'erreur courante est de commencer par les articles et de laisser l'arbre de catégories grandir tout seul : six mois plus tard, vous avez douze niveaux et plus personne ne trouve rien. Verrouillez la structure d'abord :

  • Deux niveaux de catégorie au maximum. S'il en faut un troisième, c'est probablement une étiquette, pas une catégorie.
  • Des titres orientés action : « Comment réinitialiser un mot de passe AD » vaut mieux que « Active Directory ». L'utilisateur cherche par l'action, pas par le système.
  • Quatre familles couvrent 90 % des cas : Comment faire (tutoriels), Résolution de problèmes (erreurs connues), Politiques (règles) et FAQ (publique).
  • Un article peut appartenir à plusieurs catégories dans GLPI 10/11 (table glpi_knowbaseitems_knowbaseitemcategories). À utiliser avec parcimonie : trop de catégories équivaut à aucune.

L'erreur qui fait « disparaître » les articles : la visibilité

En maintenance, la panne numéro 1 que nous rencontrons n'est pas l'absence d'article - c'est un article publié que personne ne voit. Le technicien le rédige, l'enregistre, le marque comme publié et suppose qu'il est en ligne. Mais la visibilité de GLPI fonctionne par cible explicite : si personne n'a ajouté un profil, un groupe, une entité ou un utilisateur dans l'onglet des destinataires, l'article n'est visible que par son auteur - et GLPI n'émet aucun avertissement. Nous avons audité des bases de centaines d'articles où des dizaines étaient dans ces limbes. C'est pourquoi, lors de l'onboarding de maintenance, la première chose que nous exécutons est la requête des articles orphelins de visibilité, avant même de parler de taxonomie ou d'adhésion :

-- Articles NON-FAQ sans aucune cible de visibilite :
-- ils existent, comptent dans le total et sont invisibles pour tous, sauf l'auteur.
SELECT k.id, k.name
FROM glpi_knowbaseitems k
LEFT JOIN glpi_knowbaseitems_profiles p ON p.knowbaseitems_id = k.id
LEFT JOIN glpi_knowbaseitems_users    u ON u.knowbaseitems_id = k.id
LEFT JOIN glpi_groups_knowbaseitems   g ON g.knowbaseitems_id = k.id
LEFT JOIN glpi_entities_knowbaseitems e ON e.knowbaseitems_id = k.id
WHERE k.is_faq = 0
  AND p.knowbaseitems_id IS NULL
  AND u.knowbaseitems_id IS NULL
  AND g.knowbaseitems_id IS NULL
  AND e.knowbaseitems_id IS NULL;

Un détail qui ne mord que celui qui écrit cette requête : les noms des quatre tables de visibilité ne sont pas symétriques. Les utilisateurs et les profils utilisent glpi_knowbaseitems_users et glpi_knowbaseitems_profiles, mais les groupes et les entités s'inversent en glpi_groups_knowbaseitems et glpi_entities_knowbaseitems. Inverser l'ordre, c'est passer des heures à déboguer un LEFT JOIN qui ne correspond jamais.

Pourquoi « AD », « VM » et « PC » ne renvoient rien à la recherche

La recherche de la base n'est pas un LIKE : GLPI construit un MATCH(name, answer) AGAINST(... IN BOOLEAN MODE) sur l'index FULLTEXT de la table. Sous MariaDB/MySQL avec InnoDB (par défaut dans GLPI 10 et 11), innodb_ft_min_token_size définit la longueur minimale de mot indexé, et la valeur par défaut est 3. Conséquence : les sigles de deux lettres - « AD », « VM », « PC », « SI », « BD » - n'entrent pas dans l'index, et les rechercher renvoie du vide même s'il existe des dizaines d'articles qui les citent. C'est la raison numéro 1 du « la recherche de la base ne sert à rien » que nous entendons des clients. Diagnostic :

SHOW VARIABLES LIKE 'innodb_ft_min_token_size';

Abaissez la limite à 2 dans le fichier de configuration de MariaDB et redémarrez le service :

# /etc/mysql/mariadb.conf.d/50-server.cnf  (MariaDB)
[mysqld]
innodb_ft_min_token_size = 2

La partie que presque tout le monde oublie : changer la variable ne réindexe pas les articles existants. Le token size est gravé à la création de l'index, il faut donc le reconstruire. Le plus direct est de forcer la reconstruction de la table :

-- Redemarrez MariaDB et reconstruisez l'index FULLTEXT
-- (le nouveau token size ne s'applique qu'apres recreation de l'index) :
ALTER TABLE glpi_knowbaseitems ENGINE=InnoDB;

L'erreur courante est d'abaisser le token à 2, de redémarrer et de crier victoire - la variable change, mais l'ancien index continue d'ignorer les sigles jusqu'à sa reconstruction. Sur les installations héritées en MyISAM, le paramètre équivalent est ft_min_word_len.

Fenêtre de validité : l'article qui n'apparaît que demain

Un autre piège silencieux, ce sont les champs begin_date et end_date de l'article. GLPI exclut de la recherche tout article dont le begin_date est dans le futur ou dont le end_date est déjà passé. C'est pratique pour publier une procédure seulement à partir d'une date - mais c'est aussi la cause classique du « j'ai créé l'article et il n'apparaît pas » : quelqu'un a rempli une date de début par mégarde. Si un article tout neuf ne remonte pas à la recherche et que la visibilité est correcte, vérifiez la fenêtre de validité avant toute autre chose.

FAQ publique en libre-service

Pour qu'un article apparaisse sur le portail de l'utilisateur final, marquez-le comme FAQ (champ is_faq) et définissez la visibilité par entité avec l'option récursive activée, afin de la propager aux sous-entités. Si vous voulez la FAQ accessible sans connexion, activez la FAQ pour les utilisateurs anonymes dans les paramètres d'Assistance de GLPI. La matrice que nous utilisons pour décider où chaque article vit :

Objectifis_faqCible de visibilitéOù il apparaît
FAQ publique (libre-service)1Entité + récursifPortail de l'utilisateur ; sans connexion si la FAQ anonyme est activée
Base technique interne0Profil (ex. Technicien)Onglet Base de connaissances, seuls les profils autorisés
Procédure par client0Entité spécifiqueSeuls les techniciens de cette entité
Brouillon / en révision0Aucune (auteur seul)Invisible - à utiliser volontairement, jamais par oubli

Notez la dernière ligne : « aucune cible » est un état valide pour un brouillon, mais ce doit être un choix conscient, jamais le résultat d'un oubli de la visibilité.

Adhésion : le KPI qui fonctionne (et celui qui échoue)

Le KPI « X articles par technicien et par mois » que la littérature ITSM adore produit du déchet : des articles écrits pour atteindre un chiffre que personne ne consulte. Ce qui fonctionne en pratique, c'est de rattacher la création au travail qui a déjà lieu - la clôture de tickets de catégories récurrentes. Au lieu d'exiger du volume, repérez le répétitif et transformez-le en article. Cette requête liste les sujets qui se sont le plus répétés sur les 90 derniers jours, les candidats au meilleur retour :

-- Sujets de ticket repetes sur les 90 derniers jours :
-- les candidats au meilleur retour pour devenir des articles de la base.
SELECT t.name AS sujet, COUNT(*) AS total
FROM glpi_tickets t
WHERE t.date >= DATE_SUB(NOW(), INTERVAL 90 DAY)
  AND t.is_deleted = 0
GROUP BY t.name
HAVING total >= 5
ORDER BY total DESC
LIMIT 20;

Documenter le haut de cette liste réduit les réouvertures et le temps de traitement de façon mesurable. Et mesurez du bon côté : la colonne view de chaque article compte les consultations. Un article très consulté rembourse l'investissement ; un article avec un view proche de zéro et un date_mod ancien est candidat à révision ou archivage - pas à un élément de plus dans le total.

Entretenez-la avant qu'elle ne vieillisse

Une base de connaissances n'est pas un projet, c'est une routine. GLPI conserve l'historique dans glpi_knowbaseitems_revisions, vous pouvez donc éditer sans crainte de perdre la version précédente. Fixez un rythme de révision (le trimestriel suffit souvent), en priorisant les articles les plus consultés - un pas-à-pas erroné sur la réinitialisation de mot de passe génère plus de tickets que son absence. Un article obsolète n'est pas neutre : il coûte en crédibilité et le technicien revient à « demander à untel ».

Besoin d'une base de connaissances qui réduit vraiment les tickets, avec une recherche affinée et une visibilité sous contrôle ? Découvrez le service de maintenance GLPI de NexTool.


Révisé par l'équipe NexTool Solutions.

Questions fréquentes

Il manque très probablement la cible de visibilité. Dans GLPI, publier ne suffit pas : il faut ajouter au moins une cible (profil, groupe, entité ou utilisateur) dans l'onglet des destinataires de l'article. Sans cible, il n'est visible que par son auteur. Exécutez la requête des articles orphelins pour les trouver tous d'un coup.

C'est l'innodb_ft_min_token_size (par défaut 3) d'InnoDB. Abaissez-le à 2 dans my.cnf, redémarrez MariaDB et reconstruisez l'index FULLTEXT avec ALTER TABLE glpi_knowbaseitems ENGINE=InnoDB. Sans reconstruction, le changement ne s'applique pas aux articles existants.

Marquez l'article comme FAQ (is_faq), définissez la visibilité par entité avec l'option récursive, et activez la FAQ pour les utilisateurs anonymes dans les paramètres d'Assistance de GLPI. Sans la FAQ anonyme activée, seuls les utilisateurs authentifiés la voient.

Vérifiez la fenêtre de validité (begin_date / end_date). GLPI masque tout article dont le begin_date est dans le futur ou dont le end_date est passé. Une date de début saisie par erreur est la cause classique du « l'article a disparu ».

En pratique, non. Un objectif de volume produit des articles écrits pour atteindre un chiffre que personne ne consulte. Rattachez la création à la clôture de tickets de catégories récurrentes et mesurez au nombre de consultations (colonne view), pas à la quantité produite.

Besoin d'aide ?