Recherche de documents
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 |
?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 *} |