Notes techniques concernant la version 3.5 de PMBLes recherches dans PMB : principes théoriques et applications > Principales limitations de la recherche jusqu'en 3.4
page précédentepage suivante

Principales limitations de la recherche jusqu'en 3.4

Nous allons préciser ici en quoi la recherche de PMB 3.4 et antérieures est limitée.

Performances

La méthode de comparaison avec troncature dans un index qui agrège l'ensemble des mots du champ recherché peut poser des problèmes de performance, bien que cette méthode aie quelques avantages. Le problème de performance se pose surtout lors d'une forte augmentation du nombre de notices ou sur un serveur de données à fort trafic.

Avantages de la méthode d'indexation jusqu'en 3.4

Une augmentation limitée des besoins en ressources pour MySQL

Le principal avantage de la méthode d'indexation jusqu'en 3.4 est que le nombre de lignes à inspecter lors d'une recherche est équivalent au nombre de notices. C'est à dire qu'une augmentation raisonnable du nombre de notices (un accroissement de 10% par an par exemple) a peu d'influence sur les performances. L'augmentation de puissance nécessaire à un accroissement du fonds est très amortie.

Une répartition des index et un espace de stockage limité

L'utilisation de la valeur des champs pour les recherches exactes évite de doubler l'information et limite donc le volume de stockage de la base de données. D'autre part, la répartition des index (les index sont éclatés entre les tables autorités et la table des notices) facilite leur manipulation par MySQL.

Inconvénients de la méthode d'indexation jusqu'en 3.4

Un effet de seuil important

Si les performances sont peu sensibles à une augmentation modérée du nombre de notices, une forte augmentation peut amener un effet de seuil marqué. En effet, compte tenu que l'index d'un champ contient l'ensemble des mots de ce champ de recherche, sa taille varie fortement et sa taille n'est pas prévisible. Cela oblige MySQL dans les opérations sur les tables à créer des tables temporaires sur disque dur. Les temps d'accès aux disques durs sont très lents en regard d'un accès mémoire.

Autre effet de seuil possible : MySQL dispose d'un cache pour les requêtes. Ce cache peut être vite saturé si le nombre de réponses augmente avec des index importants. La performance chute d'autant.

Les effets de la recherche par troncature

MySQL est capable d'optimiser l'accès à des enregistrements d'une table de données s'il est capable de trier le champ de recherche questionné. Ainsi, si l'on cherche dans un index de recherche PMB ce qui commence par une valeur xxx , MySQL est capable de retrouver rapidement (sans parcourir toute la table) la zone des enregistrements de la table pour laquelle l'index, trié de manière alphabétique est susceptible de répondre à la recherche.

L'utilisation d'une troncature à gauche ne permet pas à MySQL d'utiliser cette possibilité, car il n'est pas possible de déterminer où se situe "quelque chose qui commence par n'importe quoi" !

La recherche par troncature

index_sew like 'bois %' : MySQL est capable de trouver rapidement les lignes de la table de données qui commencent par b par un tri alphabétique du champ index_sew.

index_sew like '% bois %' : MySQL n'est pas capable de trouver rapidement les lignes de la table de données par un tri alphabétique du champ index_sew car le moteur de données ne sais pas par quoi commence le champ recherché. MySQL parcourt donc toute la table.

L'utilisation des tables temporaires sur disque, la saturation des caches et la troncature à gauche, l'ensemble de ces effets peut aboutir à une chute importante des performances pour des gros volumes de données, avec un effet de seuil important. Le nombre de notices dépend beaucoup de la configuration du serveur (matériel, OS, etc.).

Un ordre de grandeur peut-être de l'ordre de 150 000 notices pour une bonne machine de bureau.

Pertinence

Pondération en fonction de la fréquence

Le calcul de la pertinence est parfois simpliste : afin d'obtenir une meilleure pertinence, il faudrait pondérer chaque terme inversement proportionnellement à la fréquence d'apparition du mot dans les notices.

Pourquoi un mot est plus ou moins pertinent selon sa fréquence d'apparition ?

Plus un mot est utilisé dans les notices et moins il est pertinent. Par exemple, dans une base sur les chats, le mot chat lui même n'est pas pertinent dans une recherche, car si je recherche chat, toutes les notices sont renvoyées ! Les cas extrêmes sont les mots vides qui n'ont aucune signification du fait, entre autre, de leur fréquence d'apparition.

On pourrait pondérer les mots avec un coefficient de (1-% de notices où apparaît le mot). Par exemple, si le mot apparaît dans 2 notices sur 1000, le pourcentage est de 2/1000, soit 0,2%. La pondération serait de 1-0,002 = 0,998 (on peut arrondir à 1).

Si le mot apparaît dans 800 notices sur 1000 : le pourcentage est de 80%, la pondération serait de (1-0,8) = 0,2.

Pour calculer la pertinence, il faudrait pouvoir compter le nombre de fois où le mot apparaît. Tel que sont construits les index (un champ qui contient tous les mots), il est impossible en une seule requête SQL de distinguer chaque mot automatiquement pour les compter.

Pondération en fonction de la distance

De même, on pourrait donner plus d'importance à deux mots recherchés s'ils sont près l'un de l'autre. Ce calcul est impossible avec la recherche actuelle car il n'y a pas moyen de compter le nombre de mots entre deux mots dans le même champ.

Pondération en fonction du champ pour l'index tous les champs

Une autre pondération impossible avec le système de recherche de la 3.4 concerne la recherche tous les champs. Il serait intéressant de pouvoir pondérer les termes en fonction du champ de la notice auquel il appartient. On peut supposer qu'un mot du titre ou d'une catégorie a plus de signification qu'un mot du résumé.

L'index PMB de tous les champs n'étant qu'une agrégation des mots de tous les champs, il n'est pas possible de donner plus d'importance à un mot qu'à un autre.

Recherche phonétique

Bien que MySQL sache faire une comparaison phonétique, il n'est pas possible de l'utiliser dans la recherche car le calcul phonétique est difficilement réalisable sur une partie d'un champ.

page précédentepage suivante
A propos...PMB ServicesRéalisé avec Scenari