User:Kevin Lagaisse

--Draft

Recherche de caractères accentués impossible
Un gros défaut sur Mediawiki est la recherche de chaînes de caractères accentués. J'ai cherché partout et je n'ai trouvé que des constats sans autre solution que le passage vers Lucène.

Pour illustrer le problème, une recherche avec le terme "église" ne renvoie que les résultats contenant "église". Jusqu'ici rien de suspect. Sauf que la recherche ne renvoie pas de résultats contenant le terme "eglise". En effet le moteur fonctionne comme si un "é" était différent d'un "e" (ce qui est vrai dans l'absolu).

On pourrait me rétorquer qu'il suffit de bien orthographier les mots pour que cela ne se produisent pas, que Mediawiki n'est pas google, sauf qu'il est d'usage d'écrire "E" pour un "é" en majuscule et là le problème devient capital.

Le problème est double avec un terme comme "traçabilité".

Et pourtant cela devrait fonctionner out of the box
Quand on installe mediawiki avec les paramètres par défaut, la table search_index est en classement MyIsam latin1_swedish, capable de stocker un bon nombre de caractères européens.

Mediawiki génère des requêtes natives MySQL du type MATCH AGAINST pour des recherches sur des index de type text générés par MySQL.

Ces deux éléments combinés devraient permettre une recherche sur les caractères accentués.

Mais pourquoi cela ne fonctionne pas?
L'idée est la suivante: Mediawiki, avant de demander à MySQL de créer un "text index", convertit manuellement (en calculant) les caractère bizarres (autres qu'ASCII) grâce à une table de conversion UTF8 (réf nécessaire). C'est pour cela que dans la table on voit des caractères en U8xxx. Sauf qu'en réalité, on voit surtout des u8xxx (avec un u en minuscule). En effet, Mediawiki ajoute un strtolower mal placé pour rendre la chose inexploitable (MySQL ne s'en sort pas avec le U majuscule non plus)...

Permettre la recherche sur les caractères accentués
Une solution consiste à étendre la classe de recherche pour y inclure des modifications afin de laisser faire MySQL avec la création de l'index textuel et la recherche sans intervention de Mediawiki.

Et ceci de manière plus ou moins propre

Modifications faites sur la 1.15.4

 * Modifier SearchUpdate.php ligne 49 dans le répertoire include :


 * Dans LanguageFr.php du répertoire languages/classes ajouter une fonction à la classe LanguageFr :


 * Modification de LocalSettings.php ligne 73 dans le répertoire racine


 * Mise à jour de l’index depuis le répertoire maintenance :

Modifications faites sur la 1.16.0beta
Extension de 2 fonctions. La seconde fonction est une version simplifiée de celle de mediawiki. Elle va être mise à jour pour permettre toutes les fonctionnalités permises par celle qu'elle surcharge (action pour moi plus tard).
 * Modifier LanguageFr.php


 * Créer la classe SearchMySQLFr.php


 * Dans LocalSettings.php
 * modifier la ligne 77 :
 * Ajouter:


 * Mettre à jour l’index depuis le répertoire maintenance :

Conclusion
N'étant pas un expert en UTF8, je ne peux affirmer que cela correspond à tous les besoins pour toutes les langues européennes. Cela a néanmoins l'avantage de fonctionner sur différents environnements installés en interne.

Modifications en 1.16.0beta

 * Créer la classe SearchMySQLFr.php

Organisation des fonctions dans la 1.16.beta
[FR] Ce serait bien que la fonction normalizeText soit dans Language.php plutôt que dans SearchMySQL.php puisque son traitement dépend très fortement de la langue. On y trouve même des traitements spécifiques pour le Chinois.

[EN] It would be great and helpful if the function normalizeText could be localised in Language.php instead of SearchMySQL.php as it uses some tricks depending on the language to "normalise" the text (i.e. there are some tricks for chinese language)