Sommaire[Masquer]

Lisez cette page si votre site Joomla! a un grand nombre de pages et / ou certaines de vos pages sont particulièrement grandes.

La Recherche avancée est adaptée à la majorité des sites Joomla!. Cependant, la recherche représente des défis particuliers pour les grands sites et l'ancienne et la nouvelle méthode de recherche sont susceptibles de présenter des difficultés de différentes manières. Il convient de rappeler que la Recherche avancée est une application purement PHP et que sur les sites particulièrement grands il peut être préférable d'utiliser un moteur de recherche autonome comme icon flag uk Solr icon external

Pour utiliser la Recherche avancée sur un grand site, vous aurez probablement besoin d'ajuster certains des paramètres de configuration. Ce qui suit comporte des conseils généraux sur ce qu'il faut regarder et ce qu'il faut essayer de régler. Il y a un certain nombre de questions en suspens connues à propos de l'utilisation de la Recherche avancée sur les grands sites qui, nous l'espérons, seront abordées dans les futures versions et celles-ci sont aussi décrites ici.

La Recherche avancée fonctionne en créant et en maintenant un index des termes de recherche dans un certain nombre de tables de base de données. Le problème pour les grands sites, c'est que le processus d'indexation peut être très lourd en termes d'utilisation du processeur, de la mémoire et du disque. Même après que la construction initiale de l'index soit terminée, les mises à jour incrémentales peuvent aussi être très lourdes. La bonne nouvelle c'est que l'interrogation de l'index est une opération relativement rapide et légère.

Toujours utiliser l'indexation en ligne de commande

Parce que le processus initial d'indexation peut prendre longtemps, il est préférable d'exécuter l'indexation à partir de la ligne de commande afin d'éviter tout problème de hors-délai de session du navigateur. L'indexation en ligne de commande ne provoquera pas de hors-délai quelque soit le temps qu'elle prenne et elle peut être facilement interrompue en cas de problèmes. En outre, les messages d'erreur sont facilement visibles avec l'indexation en ligne de commande, alors qu'ils sont cachés lors de l'exécution par l'administration.

Pour obtenir des instructions sur l'utilisation de l'indexation en ligne de commande voir Mise en place de l'indexation automatique pour la Recherche avancée.

Traitement par lot

Le processus d'indexation casse le travail d'indexation en traitements par lots d'éléments de contenu. Par défaut la taille du lot est fixée à 30 ce qui signifie que jusqu'à 30 éléments de contenu seront indexés par lot. L'augmentation de la taille des lots pourra potentiellement rendre le processus d'indexation plus rapide, mais il utilisera plus de mémoire et probablement plus d'espace disque temporaire.

Problèmes de dépassement de capacité mémoire

Si l'indexation est en dépassement de capacité mémoire, vous pouvez essayer de faire les ajustements suivants un à la fois jusqu'à ce que le problème soit résolu.

  1. Diminuer la taille du lot. Si vous avez des éléments de contenu particulièrement importants l'indexation peut manquer de mémoire, même sur un seul élément de contenu, alors essayez de le baisser à 5 initialement et si vous avez encore plus de mémoire, baissez-le à 1.
  2. Si vous êtes en mesure d'allouer plus de mémoire à l'indexation, faites-le. Vous pouvez augmenter la mémoire allouée à l'indexation en ligne de commande en utilisant un paramètre supplémentaire sur la ligne de commande. Par exemple, pour augmenter la limite de mémoire à 256 Mo, utilisez la commande suivante, en remplaçant le 256M avec autant de mémoire que vous pouvez en allouer en sécurité à un processus sur votre système.
    php-d memory_limit = 256M finder_indexer.php
  3. Réduire la limite de table de mémoire. La valeur par défaut est de 30000 termes qui signifie que dès que la table temporaire en mémoire jos_finder_tokens atteint ce nombre de lignes l'indexation passera à une table sur disque au lieu d'une table en mémoire. Il se peut que vous ne disposez pas de suffisamment de mémoire pour gérer une table en mémoire complète ou presque complète dans ce cas, la réduction de la limite dira à l'indexation de passer au disque plus tôt et ainsi utiliser moins de mémoire. Essayez 10000 ou même de plus petits nombres.

  4. Changer le moteur de base de données utilisée pour les tables jos_finder_tokens et jos_finder_tokens_aggregate de MEMORY à MyISAM ou InnoDB. Cela peut sérieusement affecter les performances puisqu'une plus grande partie du processus d'indexation va utiliser le disque au lieu de la mémoire, mais il pourrait permettre à l'indexation de terminer sans manquer de mémoire. Attendez-vous à ce que le processus d'indexation fonctionne pendant beaucoup plus longtemps. Cependant ceci n'affectera pas la performance de la recherche.

  5. Essayez d'identifier les éléments de contenu qui sont à l'origine du manque de mémoire de l'indexation. Si ce n'est pas évident, alors vous pouvez essayer de désactiver tous les plug-ins de la Recherche avancée, sauf un. Exécuter l'indexation avec un seul plug-in actif à la fois devrait révéler quel(s) type(s) de contenu sont à l'origine du problème. En dernier recours, vous pourriez envisager de couper quelques éléments de contenu exceptionnellement grands en éléments séparés. Si le problème est lié à un type de contenu personnalisé alors regardez le code du plug-in et envisagez d'indexer moins du contenu disponible par élément.

Problèmes de dépassement de capacité disque

Les tables d'index de recherche intelligents peuvent devenir très grand très vite ! Les tables jos_finder_links_termsX (où X est un seul caractère hexadécimal) contiennent une ligne par terme / phrase par élément de contenu et un simple article Joomla unique contenant 1000 mots entraîne habituellement l'ajout d'environ 3000 lignes à ces tables. Un deuxième article d'une taille similaire va ajouter un nombre équivalent de lignes même si les deux articles contiennent les mêmes mots. Un site avec des dizaines de milliers d'articles, dont certains peuvent contenir des milliers de mots, est très susceptible de se retrouver avec ces tables de correspondance contenant des millions de lignes. Il n'est pas inhabituel pour les tables d'index d'occuper plusieurs giga-octets d'espace disque dans de telles circonstances.

Avec la version actuelle de la Recherche avancéeil n'y a pas beaucoup plus que vous puissiez faire à ce sujet. Cependant, il est à espérer que dans la prochaine version, vous serez en mesure d'ajuster le nombre de mots par phrase qui sont indexés. À l'heure actuelle c'est programmé à 3, ce qui signifie que chaque mot qui est indexé est également indexé comme faisant partie d'une paire de mots adjacents et comme faisant partie d'un triplet de mots adjacents. Ceci est utile pour la fonction d'auto-complétion et améliore généralement la qualité des résultats de recherche. Sur les sites où l'espace disque est un problème il serait bien de le réduire à 2 ou même 1, de sorte que les tables de correspondance soient proportionnellement plus petites.

Remarques

Il n'existe actuellement aucun verrouillage de simultanéité pour empêcher l'exécution en même temps de plus d'un processus d'indexation. Cela entraînerait presque certainement un index corrompu. De même l'enregistrement de modifications à un élément de contenu tandis qu'une indexation est en cours pourrait potentiellement endommager l'index.