Télécharger Installer Présentation Configuration Indexation Recherche OAI Javadoc Référence API-XSP Pages XSP Paramètres SDX Vue d'ensemble Structure Paramètres et flux Identification Droits Localisation Pipelines Thesaurus Indexation Recherche Index Requêtes Paramètres Amender Résultats Documents Liste alphabétique Migration Schemas Performances | Amender une requêteListe des éléments décrits dans cette page : Il arrive souvent que la question posée ne coïncide pas exactement à l'attente de celui qui l'a posée. La question est trop imprécise ; les résultats sont trop nombreux. Au contraire, la question est trop fine ; les résultats se comptent sur les doigts de la main. Il est donc récurrent que l'on ai besoin d'amender la requête afin d'améliorer l'ensemble constitué par les résultats. SDX propose plusieurs outils pour étendre, filtrer ou affiner une recherche :
Ces trois éléments (ou leurs attributs) sont utilisables par l'ensemble des actions d'exécution de requête (sdx:execute*Query) décrites plus avant. sdx:expandQuery ouvre à l'utilisation d'un thesaurus lors d'une requête. Ce dernier se présente sous la forme d'un fichier XML (voir le fichier dico.xml fourni avec l'application de démonstration SDXTest). Il suffit donc de déclarer ce dernier dans la construction d'une requête (voir la section Exécution de requêtes ). Il est possible d'affiner l'exploitation du thesaurus en déclarant la profondeur maximale autorisée, les relations à explorer et, enfin, la ou les langues supportées. Il va sans dire que ces paramètres ne sont exploitables que dans la mesure où le dit thesaurus contient l'information nécessaire. La logique est simple : une requête dans SDX peut se résumer par une recherche d'un ou de plusieurs termes dans un champ. Le thesaurus permet d'augmenter la liste des termes que l'on va rechercher.
Exemple 1. Emploi d'un thesaurus L'exemple suivant présente une page XSP générant une interrogation simple étendue par le thesaurus dico. <sdx:page> <sdx:executeSimpleQuery baseParam="b" queryParam="q"> <sdx:expandQuery th="dico" depth="1" relation="et" /> </sdx:executeSimpleQuery> </sdx:page> Notez que la référence à la base de documents et le(s) terme(s) recherché(s) sont passés en paramètres HTTP. L'application SDX attend une action de l'utilisateur pour donner ces informations. Cela signifie que l'URL {serveur sdx}/sdxtest/q.xsp?b="docs"&q="mammouths" seront interprétés : recherche mammouths dans les documents indexés dans la base de documents docs. Pour peu que le thesaurus dico présente des correspondances entre les langues françaises et anglaises, la question {serveur sdx}/sdxtest/q.xsp?b="docs"&q="mammoths" donnerait le même résultat. Voir le fichier application.xconf donné en démonstration pour connaître la syntaxe de déclaration d'un thesaurus dans une application. Exemple 2. Emploi d'un thesaurus dans une requête simple L'exemple suivant présente une page XSP générant une requête simple étendue par le thesaurus dico. A la différence de l'exemple ci-dessus, on ne souhaite étendre la requête que sur le champ "titre". <sdx:page> <sdx:executeSimpleQuery baseParam="b" query="+titre:titre +auteur:verne"> <sdx:expandQuery th="dico" depth="1" relation="et" field="titre" /> </sdx:executeSimpleQuery> </sdx:page> sdx:filter permet de construire un filtre pour une recherche. Cela signifie que l'on crée une « sous-base de documents » dans laquelle la requête sera exécutée. A ce stade, l'emploi d'un et logique dans la question n'apporte rien de moins. Il existe pourtant une différence au niveau du calcul de pertinence (et donc du tri par défaut des résultats). Le filtre n'entre pas en compte dans ce calcul. sdx:filter peut être utilisé avec l'ensemble des actions de requêtes, sauf sdx:terms.
Dans l'exemple suivant, on souhaite retrouver les articles écrits par Dominique Duviard sur les bateaux bretons. <sdx:page> <sdx:executeSimpleQuery base="sdxworld" query="+sujet:bateau +auteur:duviard +region:bretagne" > <sdx:filter ff="type" fv="article" /> </sdx:executeSimpleQuery> </sdx:page> sdx:baseQuery permet de reprendre une ancienne requête de manière à la retravailler, quelqu'en soit le but (l'extension ou la réduction du groupe de résultats). On comprendra donc qu'il s'agit bien dans ce cas d'agir a posteriori de la requête, contrairement aux deux autres outils d'amendement décrits dans cette page. Comme il a été dit dans la définition de sdx:results l'identifiant d'une requête demeure dans la mémoire de la session de l'utilisateur courant. Cela signifie, qu'à l'arrêt de la session (i.e., la fermeture du navigateur ou la déconnexion de l'utilisateur), l'identifiant est supprimé de la cache et qu'un identifiant de requête ne peut pas être partagé entre plusieurs utilisateurs. Il n'y a pas encore de mécanisme de mémorisation d'une requête au niveau du serveur, mais ce n'est pas impossible et relativement économe en ligne de code (cf. message de Frédéric Glorieux Mécanisme de cache? (30-04-2003) sur la liste <sdx-users >).
Exemple 3. Affiner une recherche Dans l'exemple suivant, nous verrons qu'une même page XSP peut offrir une action de recherche simple sur deux base de documents et permettre d'affiner le résultat de recherche obtenu. Soit la page XSP suivante : <sdx:page> <sdx:executeSimpleQuery bqidParam="bq" bop="and" base="sdxworld sdxdoc" query="q" /> </sdx:page> L'URL {serveur sdx}/sdxtest/q.xsp?q="france" donnera le résultat : <sdx:document> ... <sdx:results qid="q1" nb="45" ...> ... </sdx:results> ... </sdx:document> Lors de la même session, pour le même utilisateur, l'URL {serveur sdx}/sdxtest/qy.xsp?&bop="and"&bq="q1"&q="rue" donnera le résultat : <sdx:document> ... <sdx:results qid="q2" nb="10" ...> ... </sdx:results> ... </sdx:document> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Auteur : Malo Pichot ( AJLSM ) - 2005-03-22 |