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


SDX

Amender une requête

Liste des éléments décrits dans cette page :

Concepts clés

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 :

MéthodeDescriptionElément correspondant
Thesaurus L'utilisation de thesauri permet d'étendre une recherche à une langue différente (e.g., trouver les titres contenant le mot actualités dans les documents en français et en anglais, SDX se chargeant de retrouver le synonyme en anglais). sdx:expandQuery
FiltreUn filtre agit a contrario du thesaurus : on ne cherche pas à augmenter le groupe des résultats, mais à le réduire. sdx:filter
Sur-requêteOn peut reprendre une ancienne requête (grâce à son identifiant) et ajouter de nouveau items de recherche (e.g., je veux reprendre la requête q147 et y enlevant les auteurs dont le nom est Zola). sdx:baseQuery

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

Description

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.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationOn peut utiliser l'action sdx:expandQuery avec l'ensemble des actions recherche décrites dans cette page.
Contenu éventuelAucun.

Paramètres

NomDescriptionElément correspondant 
th Identifiant du thesaurus. sdx:thesaurus Obligatoire
depth Indique la profondeur de recherche autorisée au sein du thesaurus. Par défaut, SDX utilise les valeurs déclarées dans le fichier application.xconf. sdx:thesaurus Facultatif
relation Précise le type de relation autorisé. Par défaut, SDX utilise les valeurs déclarées dans le fichier application.xconf. sdx:thesaurus Facultatif
lang Indique la langue du terme recherché. Par défaut, il s'agit de la langue courante. (FIXME) sdx:thesaurus Facultatif
field Identifie le champ dans lequel on souhaite étendre la requête par l'utilisation d'un thesaurus. Ceci n'est réellement intéressant que lorsque l'on souhaite étendre une requête simple dont la requête fait référence à plusieurs champs (cf. exemple ci-dessous). sdx:field Facultatif

Exemples

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

Description

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.

Paramètres

NomDescription 
ff Identifiant d'un champ sur lequel on souhaite activer un filtre de requête.Obligatoire
fv Identifiant une valeur sur laquelle on souhaite activer le filtre.Obligatoire
fop Opérateur de construction du filtre. Par défaut, l'opérateur est and.Facultatif

Exemples

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(CHECK)

Description

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 >).

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans n'importe quelle action de requête sdx:*Query décrites dans la section précédente.
Contenu éventuelAucun.

Paramètres

NomDescription 
bqid Identifiant de la requête que l'on souhaite affiner ou étendre.Obligatoire
bop Opérateur de requête. Par défaut , l'opérateur est un ou logique.Facultatif

Exemples

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