Date de publication: le mardi 2 décembre 2008 à 19h40
Dernière modification: par Pascal BOYER le mercredi 3 décembre 2008 à 11h34
« Article précédent: eZ Publish : le système de toolbar - créer un outil
» Article suivant: eZ Publish : gestion des URI (supprimer index.php et le siteaccess)
Objectifs
Cet article présente les différents éléments, fichiers de configurations, templates, mis en oeuvre dans le fonctionnement du moteur de recherche standard de eZ Publish (il ne s'agit donc pas ici de eZ Find ) ainsi que la marche à suivre pour personnaliser les résultats renvoyés.
:
Le système de recherche avancé de eZ Publish n'est pas abordé ici.
La façon la plus simple de mettre en oeuvre le moteur de recherche (présent par défaut à l'issue d'une installation de eZ Publish) est d'activer, en mode full (dans la colonne droite de votre site) ou line (dans l'en-tête ou le pied de page de votre site), l'outil searchbox (je vous renvoie à l'article eZ Publish : le système de toolbar (barre d'outils) pour une description détaillée de cette fonctionnalité de eZ Publish).
Il n'existe pas d'outil spécifique au système de recherche avancée auquel on accède en fait depuis la page de résultat renvoyées par une recherche simple.
Paramètres de configuration du moteur de recherche
Le fichier site.ini
Les paramètres de configuration du fonctionnement du moteur de recherche de eZ Publish sont placés sous la rubrique [SearchSettings] du fichier de configuration site.ini
Pour ne pas modifier ce fichier, on peut commencer par copier, dans le fichier de surcharge générale settings/override/ site.ini.append.php ou dans dans le fichier de surcharge du même nom d'un siteaccess particulier la section suivante du fichier site.ini:
# Settings for the search engine framework in eZ publish [SearchSettings] SearchEngine=eZSearchEngine #SearchEngine=openFts # How the search and advanced search page works, # by default the search view does the search but it's # possible to do the search in pure template code. # Possible values are: # default - The view code does the search and passes result to template # template - The template does the search and passes the result back to the view code SearchViewHandling=default # Whether to log search stats or not LogSearchStats=enabled # The upper value for search limits fetched from HTTP Post variables # This is needed to avoid users on a site to have ridiciously huge limits MaximumSearchLimit=30 # Controls whether empty searches are allowed, by default it is disabled # since those kind of searches will take a lot of resources. # If empty searching is enabled you must make sure your template # submits enough limitations to the search, if not expect to really # slow down your site AllowEmptySearch=disabled # Enable or disable wildcard support for search. Note that enabling wildcard search # might heavily influence the performance of the system. EnableWildcard=false # Set minimum number of characters in wildcard search MinCharacterWildcard=3 # Only use stop words if total objects is greater than StopWordThresholdValue StopWordThresholdValue=100 # Do not search words which are present in more than StopWordThresholdPercent % of total objects StopWordThresholdPercent=60 # Controls whether objects are indexed when they are published, or delayed # and processed later by a cronjob DelayedIndexing=disabled # Search extension path list. Add extension name where the search plug-in is # located to this list. ExtensionDirectories[]
Si l'on supprime les commentaires, ne reste alors plus que ces lignes:
[SearchSettings] SearchEngine=eZSearchEngine SearchViewHandling=default LogSearchStats=enabled MaximumSearchLimit=30 AllowEmptySearch=disabled EnableWildcard=false MinCharacterWildcard=3 StopWordThresholdValue=100 StopWordThresholdPercent=60 DelayedIndexing=disabled ExtensionDirectories[]
Voici la description de chacun de ces paramètres suivi de sa valeur par défaut et de sa valeur alternative (en italique):
- SearchEngine=eZSearchEngine/ openFts : définit le moteur de recherche utilisé par le système
- SearchViewHandling=default/ template : précise si la recherche des résultats n'est pas ou est déterminée par le code du template search.tpl. Par défaut, les variables définies par ce code ne sont pas utilisées et il n'est donc pas possible de personnaliser les résultats. Pour y remédier (voir plus bas), le présent paramètre doit valoir « template».
- LogSearchStats=enabled/ desabled : définit si les statistiques des recherches doivent ou non être logées et du même coup accessibles à partir de l'interface d'administration.
- MaximumSearchLimit=30 : permet de limiter le nombre de recherches (???)
- AllowEmptySearch=desabled/ enabled : précise si les recherches vides ne sont pas ou sont autorisées. Dans ce dernier cas, les ressources du serveur seront mises à rude épreuve.
- EnableWildcard=false/ true : définit si les caractères spéciaux ne sont pas ou sont autorisés. Là encore, le cas échéant, les ressources du serveur seront mises à rude épreuve.
- MinCharacterWildcard=3 : définit le nombre minimum de caractères dans le cas d'une recherche incluant des caractères spéciaux.
- StopWordThresholdValue=100 : au delà de 100 objets sur le système, ce dernier doit utiliser la fonction Stop Word (« arrêt de la recherche du mot») définie par le point 9.
- StopWordThresholdPercent=60 : ne pas rechercher le(s) mot(s) s'il(s) est/sont présent(s) dans plus de 60% du nombre total d'objets présents sur le système.
- DelayedIndexing=disabled/ enabled : précise si les objets doivent être indexés dès leur publication où plus tard (ce qui implique alors l'exécution d'un script cron)
- ExtensionDirectories[] : tableau contenant une liste de chemins menant à des extensions ou plugins du moteur de recherche.
Le template search.tpl
Par défaut, le template utilisé par le système pour renvoyer les résultats de la recherche d'un ou plusieurs mots est le template design/base/templates/content/ search.tpl
Pour ne pas modifier ce template par défaut, en faire une copie dans le design public, plain_site par exemple:
cp -p design/base/templates/content/search.tpl design/plain_site/templates/content/
:
Un template design/standard/templates/content/ advancedsearch.tpl existe pour l'affichage du système de recherche avancée.
Fonctionnement par défaut du moteur de recherche de eZ Publish
La première chose à considérer est la valeur du paramètre SearchViewHandling de la section [SearchSettings] du fichier de surcharge site.ini.append.php
En effet, la valeur par défaut de ce paramètre étant default cela implique que les valeurs des variables utilisées par le template search.tpl pour afficher les résultats ne sont pas déterminées par le code même de ce template.
Il résulte de cela que l'affichage, stricto sensu, des résultats d'une recherche ne dépend que des 3 lignes de code suivantes du template search.tpl:
{section name=SearchResult loop=$search_result show=$search_result sequence=array(bglight,bgdark)} {node_view_gui view=line sequence=$:sequence use_url_translation=$use_url_translation content_node=$:item} {/section}
Il est possible de supprimer tout le reste du code, les résultats seront tout de même affichés.
On voit donc que par défaut, la modification des premières lignes de code de search.tpl, à savoir:
{let search=false()} {section show=$use_template_search} {set page_limit=10} {set search=fetch(content,search, hash(text,$search_text, section_id,$search_section_id, subtree_array,$search_subtree_array, sort_by,array('modified',false()), offset,$view_parameters.offset, limit,$page_limit))} {set search_result=$search['SearchResult']} {set search_count=$search['SearchCount']} {set stop_word_array=$search['StopWordArray']} {set search_data=$search} {/section}
...nimpacte en rien les résultats renvoyés.
La fonction StopWord
Il peut arriver que la recherche d'un mot, dont on sait l'occurrence très élevée, renvoie pourtant le message suivant:
fig. 1: Un résultat vide pour une occurrence trop importante du mot recherché
De prime abord déroutant, ce message est parfaitement logique en regard des valeurs des deux paramètres StopWordThresholdValue et StopWordThresholdPercent.
En effet, on peut conclure de ce résultat innatendu que le nombre d'objets présents sur le système étant supérieur à 100 (valeur par défaut de StopWordThresholdValue), le système détermine si le mot « exemple» est présent dans plus de 60% (valeur par défaut de StopWordThresholdPercent) de ces objets. Le cas échéant, le système décide d'exclure ce mot de la liste des mots recherchés. Dans l'exemple présent, « exemple» étant l'unique mot recherché, le système ne renvoie donc aucun résultat.
Personnaliser les résultats du moteur de recherche de eZ Publish
Pour adapter les résultats renvoyés par le moteur de recherche, il faut modifier, comme indiqué ci-dessous, la valeur par défaut du paramètre SearchViewHandling de la section [SearchSettings] du fichier de configuration site.ini.append.php:
SearchViewHandling=template
Cette modification apportée, vider les caches pour que le système calcule les résultats en se basant sur le code du template search.tpl.
Référez-vous à la documentation de la fonction de recherche search pour savoir comment modifier le code du template.
Le paramètre class_id permet par exemple de définir la liste des seules classes d'objets dont il faut prendre en compte les instances pour calculer les résultats. Il devient dès lors possible, en excluant de cette liste l'identifiant de la classe image, de ne pas retenir les images dans la liste des résultats.
Définir le nombre de résultats affichés par page
Le template search.tpl contient le code google navigator dont l'objet est de paginer les résultats sur le même principe que celui utilisé par le célèbre moteur de recherche Google.
La variable page_limit, en début de template, définit le nombre de résultats affichés par page.
Par défaut, cette variable vaut 10.
Inhiber le lien Recherche avancée
Pour s'assurer que personne n'accèdera, via le lien présent sur la page de résultat d'une simple recherche (voir figure 1), à la fonction de recherche avancée (qui dévoile un certain nombre d'informations sur la structure de votre site) vous pouvez configurer une redirection vers la page d'accueil du site, par exemple.
Pour cela, connectez-vous à l'interface d'administration de votre site puis dans l'onglet Administration, cliquez sur le lien URL Wilcards pour afficher ceci:
Fig. 2 : Trois étapes pour créer une redirection
En suivant les trois étapes indiquées par la figure ci-dessus, toute personne tapant un URI commençant par:
http://votresite.com/content/advancedsearch
...sera automatiquement redirigée vers la page d'accueil de votre site.
Commentaires














