Documentation SDX-2 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ête Liste des éléments décrits dans cette page : `sdx:expandQuery` ; `sdx:filter` ; `sdx:baseQuery` . ## 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éthode | Description | Elé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`
Filtre | Un filtre agit a contrario du thesaurus : on ne cherche pas à augmenter le groupe des résultats, mais à le réduire. | `sdx:filter`
Sur-requête | On 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'utilisation | On peut utiliser l'action `sdx:expandQuery` avec l'ensemble des actions recherche décrites dans cette page.
Contenu éventuel | Aucun.
### Paramètres
Nom | Description | Elé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
Nom | Description |
--- | --- | ---
`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'utilisation | Dans n'importe quelle action de requête `sdx:*Query` décrites dans la section précédente.
Contenu éventuel | Aucun.
### Paramètres
Nom | Description |
--- | --- | ---
`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

| Home |
Copyright © 2000, 2001, 2002, 2003, 2004 Ministère de la culture et de la communication, AJLSM.