Recherche de documents

  • premiers-pas
Created: 13-10-2025 - Last updated: 13-10-2025

Le moteur (Elasticsearch)

SONAR utilise Elasticsearch, un moteur de recherche rapide et puissant. La clé de ses performances réside dans le fait qu'il n'interroge pas directement une base de données, mais plutôt des index textuels au format JSON, ce qui lui permet de trouver rapidement des informations, même parmi de très grandes quantités de données. Ses différents mécanismes en font un moteur de recherche à la Google, flexible et facile à utiliser pour les non-initiés, tout en offrant des fonctions plus avancées pour les utilisateurs techniques.

Elasticsearch utilise des vecteurs mathématiques pour attribuer des scores aux ressources retournées par une requête et les classer par pertinence.

Opérateurs booléens et conseils de recherche

Par défaut, les espaces entre les mots sont traités comme des opérateurs ET. Les modificateurs de recherche et autres opérateurs booléens peuvent être utilisés avec la syntaxe de la chaîne de requête simple d'Elasticsearch.

Voir l'aide de base pour des exemples de raccourcis de recherche booléenne.

Construire des recherches avancées

Pour construire une recherche avancée, deux outils sont disponibles et combinables :

  • Les paramètres URL sont prédéfinis par le système pour faciliter les requêtes fréquentes. Ces paramètres contrôlent également l'affichage des résultats de la recherche et les facettes de filtrage. Dans l'URL, les paramètres sont séparés par le symbole &.
  • Les requêtes query string Elasticsearch permettent de cibler précisément un ou plusieurs champs de l'index et sont saisies après le paramètre q=.

Paramètres d'URL

Les paramètres sont les éléments dans l'URL placés après le point d'interrogation. Ils se combinent entre eux au moyen du symbole &.

Paramètre Effet Exemple API Exemples interface
PID d'une ressource Accéder à une ressource spécifique
Les interfaces utilisateur renvoient la vue détaillée de la ressource, et l'API renvoie la ressource brute telle qu'elle est stockée dans la base de données sans les enrichissements de l'indexation.
api/documents/111874 public / admin
q Introduire une requête Elasticsearch api/documents/?q=montagne public / admin
page Définir le numéro de la page de résultats api/documents?q=montagne&page=5 public / admin
size Définir le nombre d'éléments affichés dans chaque page de résultats api/documents?q=montagne&size=25 public / admin
sort Définir comment les résultats sont triés. Les options de tri possibles peuvent varier selon les ressources. api/documents?q=montagne&sort=title public / admin
prettyprint Formatage lisible de l'affichage JSON api/documents/?q=montagne&prettyprint=1 Uniquement disponible dans l'API
Autre filtre prédéfini Appliquer un filtre/une facette prédéfini(e) par le système. api/documents?q=montagne&document_type=coar:c_6501 public / admin

Syntaxe des requêtes

Une requête est saisie à l'aide du paramètre q. Les possibilités de la syntaxe de la requête sont décrites en détail dans la documentation d'Elasticsearch : Query String Syntax.

Une requête vous permet de cibler des champs ou des sous-champs de la ressource en utilisant les noms d'index de ces champs. Chaque . dans une requête indique qu'un sous-champ est interrogé, et le : introduit la valeur recherchée. Il est donc important de connaître la structure des champs du document lors de la construction d'une requête. Par exemple, provisionActivity.statement.value:Zürich recherche Zürich dans value qui est un sous-champ de statement, lui-même un sous-champ de provisionActivity dans l'index du document.

Dans certains cas, la barre oblique inverse est utilisée dans les requêtes pour permettre à certains caractères d'échapper au traitement d'Elasticsearch. Dans la barre d'adresse d'un navigateur, cette barre oblique inverse doit être encodée au format URL : %5C. Par exemple, l'opérateur *, qui recherche dans tous les sous-champs d'un champ structuré, doit être échappé : %5c*.

Opérateurs

Opérateur Description Exemple d'API Exemples d'interfaces
Recherche dans plusieurs sous-champs (\*) Inclut tous les sous-champs de title, y compris les sous-titres et les titres supplémentaires api/documents/?q=title. \*:étude public / admin
* Troncature d'un mot dans une recherche api/documents/?q=title.mainTitle.value:"myopath*" public / admin
AND Opérateur booléen ET api/documents/?q=title.\*:(montagne AND biologie) public / admin
OR Opérateur booléen OU api/documents/?q=titre.\*:(montagne OU biologie) public / admin
NOT Opérateur booléen ET PAS api/documents/?q=title.\*:(montagne NOT biologie)) public / admin
(_exists_:<nom du champ>) Recherche de ressources où un champ spécifique est présent api/documents/?q=_exists_:partOf public / admin
Guillemets "" Recherche de ressources contenant une expression api/documents/?q=title.\*:"à la recherche du temps" public / admin
Les opérateurs peuvent combiner plusieurs termes de requête dans un sous-champ (?q=subjects.\*:(montagne AND Cervin) : documents avec "montagne" ET "Cervin" dans le champ sujet) ou plusieurs sous-requêtes (?q=subjects.\*:montagne AND contribution.\*:"ramuz" : documents avec "montagne" dans le champ sujet ET "ramuz" dans le champ contribution).

Exemples de recherche

Description de la requête Syntaxe Exemple
partout - ?q=étude
par titre title.\*: ?q=titre.\*:étude
par auteur contribution.\*: ?q=contribution.\*:(rené schneider)
dans le texte intégral fulltext: ?q=fulltext:remerciements
par identifiant identifiers.\*: ?q=identifiers.\*:333332
par type de diplôme dissertation.degree: ?q=dissertation.degree:(Mémoire de bachelor)
par lieu, éditeur ou date provisionActivity.\*: ?q=provisionActivity.\* :(Fribourg 2022)
Par plage de dates de création (les crochets sont inclusifs) [*date* TO *date*] ?q=_created:[2022-01-01 TO 2022-12-31]
Par plage de dates de mise à jour (les parenthèses sont exclusives) {*date* TO *date*} ?q=_updated:{2021-10-24 TO *}

Principes de base | Déposer un document