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 | Exécution des requêtesListe des actions SDX décrites dans cette page :
SDX est avant tout un outil de recherche d'informations dans une collection de documents XML. Il offre ainsi au développeur un large panel d'éléments pour construire les outils de recherche de son application. Il n'est pas question de développer les caractéristiques de la recherche documentaire dans cette page. Cet aspect très important de SDX occupe déjà un chapitre complet de cette documentation (TODO : lien vers le chapitre). On se contentera de reprendre quelques informations. La génération d'une requête (et donc d'un résultat de requête) dans SDX se déroule en trois phases :
Il est important d'avoir cette vue d'ensemble de la génération d'une requête pour bien comprendre l'emploi des outils de l'API-XSP de SDX décrits dans cette documentation technique. Cette page ne présente que les deux première phases de génération (la construction et l'exécution). Les éléments SDX liés aux résultats d'une interrogation sont décrits dans la section Gestion des résultats . Le tableau ci-après classe les différents éléments de l'API-XSP entrant dans la construction de la recherche documentaire dans une application SDX selon la place qu'ils occupent dans ce processus :
En guise de conclusion de cette introduction, il convient de noter que SDX offre plusieurs manières d'améliorer une requête. On peut choisir (a priori du résultat) d'étendre celle-ci à l'aide d'un thesaurus ou, au contraire, d'y appliquer un filtre. Il est également possible de reprendre une recherche (on agit ici a posteriori du résultat) pour la retravailler. Ces éléments de l'API-XSP de SDX sont décrits plus loin. Dans le panel des actions de recherche mises à disposition par SDX, sdx:fieldQuery représente la recherche la plus précise, celle qui permet de réduire le bruit à son minimum. Pour cela, sdx:fieldQuery recherche une valeur précise dans un champ. Par exemple, on peut retrouver les documents dont le sujet est explicitement Cartographie de la France. Ce type de requête ne prendra pas en compte les documents dont le sujet s'en approche tel que Cartographie de l'Aquitaine ou Archéologie de la France. C'est en cela que ce type de recherche est le plus précis. Il est toutefois important de noter que cette méthode n'est logiquement utilisable que sur des index de type field. C'est-à-dire des champs indexés tels quels, les termes qu'ils contiennent étant considérées comme une seule et même valeur. Utiliser une requête sur champ sur un index de type word (chaque terme correspond à une valeur à indexer) serait illogique et n'aurait peu ou pas de chance d'aboutir à un résultat.
sdx:executeFieldQuery apporte l'environnement nécessaire à l'exécution d'une requête sur champ.
Paramètres communs aux actions de requêtes (facultatifs).
Exemple 1. Rechercher les documents ayant un même auteur Dans l'exemple suivant, on veut obtenir la liste des documents écrits par le même auteur, et seulement ces documents. <sdx:page> <sdx:executeFieldQuery base="sdxworld" field="auteur" value="Emile Zola"/> </sdx:page> Exemple 2. Rechercher un terme dans un index Dans l'exemple suivant, on recherche l'ensemble des documents d'une base de documents. On recherche dons strictement la même chose dans l'exemple illustrant une recherche simple. La manière d'y arriver n'est cependant pas la même. <sdx:page> <sdx:executeFieldQuery base="sdxworld sdxdoc" field="sdxall" value="1" hpp="-1" /> </sdx:page> On trouvera un exemple atypique de l'utilisation de sdx:executeFieldQuery dans la description de sdx:debug. Dans le panel des actions de recherche SDX, sdx:listQuery représente la recherche d'une liste de termes. On peut y voir une extension de la recherche sur champ. Lorsqu'une base indexe un champ répétable (auteur(s), sujet(s), etc.), il peut être intéressant de rechercher les documents répondant à plusieurs valeurs sur ce même champ. La recherche d'une liste (paramètre value répétable sur le champ field), correspond à la requête simple +field:value1 +field:value2 +field:value3. Notez que l'opérateur par défaut est un ou logique. Il peut être modifié en et (op=or|and) pour donner la requête suivante : field:value1 field:value2 field:value3.
sdx:executeListQuery apporte l'environnement nécessaire à l'exécution d'une requête sur liste.
Paramètres communs aux actions de requêtes (facultatifs).
Exemple 3. Rechercher plusieurs termes dans un index Dans l'exemple suivant, on recherche les termes "verne" et "jules" dans un index répétable "auteur". On omet de préciser l'application et la base de documents ; il s'agit de l'application et de la base de documents courantes comme décrit dans la section sur les paramètres. <sdx:page> <sdx:executeListQuery field="auteur" value="verne jules" op="and"/> </sdx:page> Dans le panel des actions de recherche fournies par SDX, sdx:dateQuery représente une recherche de dates (représentant ou non un intervalle). La recherche par intervalle de dates ne donnera de résultats intéressants que pour un champ de type date. Il s'agit d'une recherche où l'on peut spécifier une date de début ou une date de fin (voire les deux) et trouver des résultats dont le champ spécifié contient une date entre ces deux valeurs. Si l'une des deux dates n'est pas spécifiée, la recherche n'est pas bornée. Si aucune date n'est spécifiée, il y aura une erreur d'exécution. TODO : décrire l'usage de 2 champs s'appliquant réciproquement au champ concerné par to (!) puis à celui concerné par from
sdx:executeDateQuery apporte l'environnement nécessaire à l'exécution d'une requête sur date.
Paramètres communs aux actions de requêtes (facultatifs).
Exemple 4. Recherche sur un intervalle de dates Dans l'exemple suivant, on recherche les documents qui ont été créés (champ creation) entre le 23 et le 24 mai 2003. On omet de préciser l'application et la base de documents ; il s'agit de l'application et de la base de documents courante comme décrit dans la section sur les paramètres. <sdx:page> <sdx:executeDateQuery field="creation" from="2003-05-23" to="2003-05-24"/> </sdx:page> L'action sdx:dateIntervalQuery est identique à sdx:dateQuery . On se reportera à cette dernière pour en connaître la définition. L'action sdx:executeDateIntervalQuery est identique à sdx:executeDateQuery . On se reportera à cette dernière pour en connaître la définition. Malgré son nom sdx:simpleQuery représente sans doute l'élément le complexe ou le puissant des API décrites ici. La lecture du tableau de classement au début de cette page peu laisser perplexe dans la mesure où sdx:simpleQuery apparaît à deux endroits, dans les types ainsi que dans les syntaxes de requêtes. Cela traduit, en effet, le double aspects de cet élément. D'un côté il représente le type le plus simple de requête supporté par SDX. On recherche un mot dans le champ par défaut (défini dans application.xconf ; s'il n'y en a pas Lucene prend le dernier de la liste : FIXME). De l'autre côté, sdx:simpleQuery permet d'effectuer une requête directement dans le langage de l'analyseur de requête (query parser) de Lucene (i.e., le moteur de recherche par défaut supporté par SDX). Cela signifie que l'on peut concrètement effectuer l'ensemble des types de recherche décrits ci-avant :
SDX ajoute une fonctionnalité à cette syntaxe déjà importante. Il permet l'utilisation d'un opérateur |. Lorsque cet opérateur englobe le terme recherché, il déconnecte l'analyseur de mot. De cette manière, il est possible d'effectuer une recherche sur champ. La requête simple titre:|France| donnera tous les documents dont le champ titre contient le mot "France" avec la majuscule.
Une requête simple peut-être exécutée en tant que telle grâce à l'action sdx:executeSimpleQuery . Elle peut également entrer dans la construction d'une requête complexe.
sdx:executeSimpleQuery apporte l'environnement nécessaire à l'exécution d'une requête simple.
Paramètres communs aux actions de requêtes (facultatifs).
Exemple 5. Rechercher l'ensemble des documents Dans l'exemple suivant, on recherche l'ensemble des documents contenus dans deux bases de document sdxworld et sdxdoc (ce sont les deux bases de documents définies dans l'application SDXTest). Lors de l'indexation, chaque document se voit affecté un champ sdxall avec une valeur de 1. De cette manière, il suffit d'interroger sur ce champ pour avoir l'ensemble des documents. Le paramètre hpp positionné à -1 indique que l'on veut toutes les réponses dans une seule page de résultats. <xsp:page> <sdx:executeSimpleQuery base="sdxworld sdxdoc" query="sdxall:1" hpp=-1 /> </xsp:page> Avec sdx:complexQuery et sdx:simpleQuery , sdx:linearQuery est l'une des trois actions de recherche décrivant une syntaxe donnée. Cela signifie que sdx:linearQuery n'effectue pas de recherche particulière comme sdx:fieldQuery pour une recherche dans un champ ou sdx:dateQuery pour rechercher une date. Elle propose une certaine forme de rédaction. sdx:complexQuery en propose une autre. La requête linéaire est un outil commode pour formuler une recherche avancée par formulaire. Elle permet de formuler des requêtes sur un même niveau (i.e. en ligne). Ainsi la question « Trouve moi les livres ayant le mot monde dans le titre et ayant la physique pour sujet, ou alors écrit par Einstein » peut se traduire sous la forme d'une URL (avec une base de documents configurée en ce sens) : ?op=and&f=titre&v=monde&op=and&f=sujet&v=physique&op=or&f=auteur&v=einstein, ce qui donnera une requête simple +titre:monde +sujet:physique auteur:einstein.
sdx:executeLinearQuery apporte l'environnement nécessaire à l'exécution d'une requête linéaire (cf. plus haut).
Paramètres communs aux actions de requêtes (facultatifs).
Avec sdx:linearQuery et sdx:simpleQuery , sdx:complexQuery est l'une des trois actions de recherche décrivant une syntaxe donnée. Cela signifie que sdx:complexQuery n'effectue pas de recherche particulière comme sdx:fieldQuery pour une recherche dans un champ ou sdx:dateQuery pour rechercher une date. Elle propose une forme de rédaction, sans doute la plus élaborée. Une recherche complexe permet d'élaborer un arbre de requêtes reliées par des opérateurs ( complexop ). Cette méthode permet de représenter des niveaux de parenthèses. L'objectif serait qu'une requête complexe puisse comporter des requêtes elles-mêmes complexes. Cette possibilité n'est pas encore complètement supportée par SDX, car, pour l'essentiel, l'information provient de formulaires (généralement plats). On peut au moins combiner toutes les requêtes précédemment décrites afin d'affiner les recherches avancées.
sdx:executeComplexQuery apporte l'environnement nécessaire à l'exécution d'une requête complexe.
Paramètres communs aux actions de requêtes (facultatifs).
Exemple 6. Construction d'une requête complexe Le code qui suit provient d'un cas réel. <sdx:executeComplexQuery> <sdx:sort field="region" order="descending"/> <sdx:sort field="departement" order="descending"/> <sdx:simpleQuery queryParam="fulltext"/> <sdx:listQuery field="pays" valueParam="pays" complexopParam="pays_op"/> <sdx:listQuery field="themes" valueParam="themes_v" op="and" complexopParam="themes_op"/> <sdx:simpleQuery field="title" queryParam="title" complexopParam="title_op"/> </sdx:executeComplexQuery> On repérera le paramètre complexop qui permet de relier chaque requêtes entre elles, selon le même mécanisme booléen que la requête linéaire. On découvre aussi qu'à chaque execute*Query correspond un *Query. Cette action construit une requête, mais sans l'exécuter. Un objet est construit ; il est combiné dans la requête complexe. Mais les résultats sont sortis par sdx:executeComplexQuery, selon la même manière que les requêtes précédentes. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Auteurs : Malo Pichot ( AJLSM ) ; Pierrick Brihaye - 2003-11-26 |