logo bdsp

Banque de données en santé publique

Recherche par expressions régulières

En informatique, une expression régulière est une chaîne de caractères, qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles (1).

Suivant la syntaxe utilisée, il est possible de répéter zéro, une ou plusieurs fois des chaînes de caractères d’un mot, ce qui conduit à définir un ensemble de mots dont l’orthographe est proche.

Les expressions régulières utilisées dans les équations de recherche permettent de trouver des résultats malgré les erreurs d’orthographe et doivent être encapsulées avec des slashs, comme suit :
au.\*:/joh?n(ath[oa]n)/

Elles permettent également de dépasser une limite du moteur de recherche Elasticsearch, à savoir, l’impossibilité d’utiliser une troncature dans une recherche par expression exacte ou de type phrase (recherche par proximité). Ceci peut être utile, par exemple, si l’on veut rechercher toutes les publications d’un auteur dont le nom est courant.
Pour rechercher les documents associés à « Martin J. », nous écrirons :
au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn][, ]+[Jj].*/

Construire une expression régulière, pas à pas
Dans ce paragraphe, nous allons reprendre étape par étape, la construction de l’expression régulière qui permet de trouver les documents associés à l’auteur « Martin J. ».

au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn][, ]+[Jj].*/

Il y a des règles spécifiques à l’écriture des expressions régulières. Uniquement pour les expressions régulières :
? signifie 0 ou 1 fois l’item précédent
* signifie 0 ou n fois l’item précédent
+ signifie 1 ou n fois l’item précédent

Dans l’exemple que nous étudions, il faut d’abord choisir si nous utilisons tous les sous-index de l’index auteur « au » ou si nous choisissons un seul sous-index. Dans l’exemple étudié, il est judicieux de ne prendre en compte que le sous index « raw » car il ne segmente pas chaque terme et ne fait pas de traitement sur les chaînes de caractères. De ce fait le nom de l’auteur, « Martin J », n’est pas transformé.

Pour aller plus loin sur les index et sous-index, voir : Recherche experte (paragraphe 9)

1) Suite au choix effectué, nous écrivons
au.raw :

2) L’expression régulière s’écrit toujours entre 2 slashs
au.raw:/ /

3) Chaque lettre peut être en majuscule ou minuscule
au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn]/

4) Le nom peut être suivi d’une virgule ou d’un espace
au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn][, ]/

5) Le nom doit être suivi de l’initiale J en minuscule ou en majuscule
au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn][, ]+[Jj]/

6) La première lettre du prénom est suivie ou pas d’un point.
au.raw:/[Mm][Aa][Rr][Tt][Ii][Nn][, ]+[Jj].*/

Les crochets sont utilisés pour trouver les possibilités d’écriture relatives à un seul caractère alors que les parenthèses permettent de regrouper un ou plusieurs caractères.
Dans l’expression régulière suivante :

au.\*:/joh?n(ath[oa]n)/

? indique que la lettre « h » doit être absente ou présente une fois,
[oa] signifie qu’il y aura un « o » ou un « a », à cette place dans le nom de l’auteur.
Avec cette expression régulière, on pourra trouver les auteurs ayant pour nom : jonathan, jonathon, johnathon ou johnathan.

A noter que cette recherche dans l’index auteur, « au », ne concerne pas uniquement le sous index « raw », mais tous les sous-index déclarés pour cet index, à savoir : « raw », « fold » et « rich ».

Pour aller plus loin, voir : Liste des index et sous-index

Si l’on souhaite prendre en considération plus de deux choix pour un caractère, on peut écrire comme suit :
(é|e|è)

Cette forme d’écriture permet de gérer le choix entre plusieurs formes accentuées ou les possibilités d’avoir des virgules suivies ou précédées d’un espace, dans la structure des métadonnées.

Pour en savoir plus sur les règles régissant l’écriture des expressions régulières dans Elasticsearch, voir :
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/query-dsl-regexp-query.html#regexp-syntax