Requêtes sur ISTEX

De Wicri Manuel
Révision datée du 8 mars 2016 à 11:30 par imported>Jacques Ducloy (Limitations de la portée des requêtes à un champ donné)

Cette page présente des requêtes simples sur ISTEX dans un environnement Unix avec les commandes de la famille IstexGetCorpus.

Introduction

La plateforme ISTEX utilise le serveur de recherche Elasticsearch. Celui-ci est une application paramétrable qui s'appuie sur le moteur de recherche Lucene.

La compréhension d'une requête ISTEX avancée demande donc la compréhension de trois niveaux de fonctionnalités :

  • le langage de requête du moteur Lucene syntaxe Lucene,
  • le fonctionnement de l'application Elastichsearcb
  • le paramétrage réalisé par l'INIST

Pour un premier contact avec l'api ISTEX, il est conseillé de démarrer avec un navigateur en s'appuyant sur la documentation associée.

Requête portant sur un seul terme

L’adaptation de cette documentation au contexte Unix cause quelques problèmes de conflit entre la syntaxe acceptée par le moteur Lucene et celle du shell Unix.

Pour une recherche sur un terme unique (Single Term), la formulation d'une requête se réduit à « -q term ». Exemples :

 IstexGetCorpusSize -q rabelais
 IstexFlashCorpus   -q rabelais -s 20
 IstexExplorCorpus  -q rabelais -s 200 -d testRabelais

Le terme rabelais est alors recherché dans l'ensemble du document, indépendamment de la casse, ainsi les requêtes suivantes sont équivalentes :

 IstexGetCorpusSize -q rabelais
 IstexGetCorpusSize -q Rabelais
 IstexGetCorpusSize -q rabelaiS

Requête avec des groupes de termes

Il est possible de poser des requêtes avec des groupes de termes avec un fonctionnement proche de celui de Google.

Dans les lignes de commande shell, il suffira de regrouper les termes entre des guillemets droits ( " ) ou double quotes. Attention, la requête envoyée à l'API ne contiendra pas ces caractères.

Pour sélectionner tous les documents contenant Rabelais ou Pantagruel ou Gargantua, il faudra écrire :

 IstexGetCorpusSize -q "rabelais pantagruel gargantua"

A la date de rédaction de ce paragraphe on obtient : 9938.

En fait cette requête utilise de façon implicite l'opérateur booléen OU (OR en anglais dans la syntaxe Lucene). La requête précédente est donc équivalente à :

 IstexGetCorpusSize -q "rabelais OR pantagruel OR gargantua"

Si l'on souhaite obtenir tous les documents contenant à la fois les trois termes, il faudra écrire :

 IstexGetCorpusSize -q "rabelais AND pantagruel AND gargantua"

On obtient alors : 472.

Dans la restitution des résultats, le service ISTEX trie les documents avec des mécanismes de pondération. Un document qui contient 10 fois le terme « rabelais » sera par exemple classé avant celui qui n'en contiendra qu'un seul.

Ceci peut être mis en évidence avec l'utilisation de l'option -s (size) dans la commande IstexGetCorpus. La requête suivante :

 IstexGetCorpus -q "rabelais AND pantagruel AND gargantua" -s 2

provoque l'impression de :

{
  "total": 472,
  "nextPageURI": "https://api.istex.fr/document/?q=rabelais%20AND%20pantagruel%20AND%20%20gargantua&size=2&from=2",
  "firstPageURI": "https://api.istex.fr/document/?q=rabelais%20AND%20pantagruel%20AND%20%20gargantua&size=2&from=0",
  "lastPageURI": "https://api.istex.fr/document/?q=rabelais%20AND%20pantagruel%20AND%20%20gargantua&size=2&from=470",
  "hits": [
    {
      "title": "Gargantua, Pantagruel , and renaissance cooking tracts: Texts for consumption",
      "id": "456AC60BC74560F8AA789699F40828F1A00D46C7"
    },
    {
      "title": "L'œuvre de rabelais d'après les recherches les plus récentes",
      "id": "C625D476CAD3E04B33A09D459C919026D04AA7B8"
    }
  ]
}

En combinant avec un filtrage par un grep sur les titres, le jour où cette page a été écrite, les 2 requêtes suivantes ont donné un résultat identique :

 IstexGetCorpus -q "rabelais AND pantagruel AND  gargantua" -s 5| grep title
 IstexGetCorpus -q "rabelais pantagruel gargantua" -s 5| grep title

On peut observer le comportement du moteur en jouant sur la taille de la requête pour voir à quel niveau les résultats commencent à diverger. On pourra par exemple faire

IstexGetCorpus -q "rabelais AND pantagruel AND gargantua" -s 50 |  grep title | tail -5
IstexGetCorpus -q "rabelais pantagruel gargantua" -s 50 |  grep title | tail -5
IstexGetCorpus -q "rabelais AND pantagruel AND gargantua" -s 150 |  grep title | tail -5
IstexGetCorpus -q "rabelais pantagruel gargantua" -s 150 |  grep title | tail -5

Limitations de la portée des requêtes à un champ donné

Sans précision les requêtes portent sur la présence d'un terme dans l'ensemble du document.

Par exemple, la requête :

 IstexGetCorpusSize -q title:rabelais

permet de ne retenir que les documents contenant Rabelais dans le titre.

Ceci peut être mis en évidence par :

 IstexGetCorpus -q title:rabelais -s 10 | grep title

Pour obtenir une liste complète on peut consulter la documentation de l'API ISTEX. Voici quelques champs d'usage fréquent :

author.name
La requête :
 IstexGetCorpusSize -q author.name:rabelais
permet de repérer 38 documents contenant ayant rabelais comme nom ou prénom.
Pour une étude plus fine, on peut jouer avec les commandes DILIB
    IstexGetCorpus -q "author.name:rabelais" -s 100 -o mods             \
     | SxmlSelect -s mods/name -p @s1 -g mods/titleInfo/title -p @g1    \
     | grep Rabelais | SxmlIndent | more