Requêtes sur ISTEX

De Wicri Manuel

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 Elastichsearch
  • 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 une liste de termes

Il est possible de poser des requêtes avec une liste 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 une commande 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.

Sélection par auteur

Pour poser une requête sur les auteurs, on utilise le champ « author.name ».

Ainsi, 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. Le script ci-dessous permet d'examiner les auteurs ayant Rabelais comme nom ou prénom et d'en imprimer les titres.

    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

Sélection par affiliation

Il est également possible de faire des sélections par affiliation avec le champ « author.affiliations ».

Par exemple pour repérer des publications de l'Université François Rabelais à Tours, on peut faire :

 IstexGetCorpusSize -q author.affiliations:rabelais

Pour être plus précis :

 IstexGetCorpusSize -q "author.affiliations:rabelais AND author.affiliations:tours"

Sélection par ISSN (International Standard Serial Number)

Pour poser une requête sur l'ISSN, on utilise le champ « host.issn » suivi du numéro ISSN de publication périodique, comme le montre l'exemple ci dessous concernant la revue «Music & Letters».

Ainsi, la requête :

 IstexGetCorpusSize -q 'host.issn:"0027-4224"'
permet de repérer 13784 documents ayant comme numéro ISSN :"0027-4224".

Sélection par DOI

Pour une sélection par Digital Object Identifier (DOI), faire :

 IstexGetCorpusSize -q 'doi:"10.1002/path.4638"'

Sélection sur plusieurs champs

On peut naturellement combiner des recherches limitées à un champ avec des opérateurs booléens. Voici quelques exemples portant sur les champs titre et résumé.

 IstexGetCorpusSize -q "title:rabelais AND abstract:rabelais"
 IstexGetCorpusSize -q "title:rabelais abstract:rabelais"
 IstexGetCorpusSize -q "title:rabelais NOT abstract:rabelais"

Expressions sur les termes

termes groupés

Il est possible de faire des recherche portant sur des suites de termes, par exemple, rechercher les occurences de « françois rabelais ». Pour cela la syntaxe Lucene utilise les guillemets anglais. Dans une fenêtre de recherche sur le démonstrateur ISTEX on peut ainsi écrire :

"francois rabelais"

Avec des commandes shells il faut utiler des simples quote pour encadrer les guillemets anglais. Ainsi la requête :

 IstexGetCorpusSize -q '"francois rabelais"'
permet de repérer les documents contenant strictement la succession des termes « francois » et « rabelais ».