L'outil de recherche Solr est accessible via le ribbon dans l'onglet Accueil, catégorie Outils, ou via le panneau de critère de la plupart des outils de recherche classiques où il est possible de basculer sur les recherches avancées et les recherches Solr.

Ce type de recherche est destiné uniquement à des utilisateurs avertis. Elle permet de construire des recherches très avancées et possède sa propre syntaxe. Les critères, opérateurs de comparaison, opérateurs logiques, colonnes et facettes sont libres. La principale restriction est la sélection d'au moins un type de contenu.

Voici les différents points qui seront abordés dans ce document :

  1. Présentation de l'interface
  2. Panneau des critères
    1. Type(s) de contenu et rôle(s)
    2. Requête
      1. Syntaxe
        1. Comparaisons
        2. Opérateurs logiques
        3. Recherches approximatives
        4. Poids dans les requêtes
      2. Suffixe d'un champ
      3. Requêtes jointées
    3. Colonnes et facettes
      1. Colonnes
      2. Facettes
  3. Liens utiles

Présentation de l'interface

L'outil est composé de plusieurs zones, les points 1 à 5 correspondent à la création de la requête de recherche, et la zone 6 correspond aux résultats de recherche.

  1. Type(s) de contenu et rôle(s)
    C'est le contexte principal, ce champ est obligatoire, il permet d'indiquer sur quels types de contenus la recherche sera lancée.
  2. Requête
    C'est l'emplacement pour définir les clauses de la requêtes. Nous verrons plus en détail dans la suite de ce document comment construire une requête et quelles sont les différentes possibilités.
  3. Colonnes
    Ce champ permet de sélectionner les colonnes qui seront présentes dans les résultats de recherche.
  4. Facettes
    Les facettes sont destinées à créer des filtres dynamiques dénombrables sur les valeurs d'un champ.
  5. Boutons de recherche
    Ce sont les boutons qui permettent de lancer ou d'annuler une recherche. Ce sont les mêmes que pour une recherche simple ou une recherche avancée.
  6. Affichage des résultats
    Identique à celui des autres outils de recherche, possibilité de tris, groupes, facettes, pagination des résultats, etc.

Panneau des critères

L'auto-complétion (Ctrl + Espace) est disponible à tous les niveaux de l'outil de recherche Solr. Il est vivement conseillé d'en user et en abuser.

Type(s) de contenu et rôle(s)

La sélection du type de contenu (ou du rôle) permet de dessiner un contexte principal qui servira à définir quels champs seront disponibles à l'auto-complétion pour les autres zones du panneau des critères de recherche.

L'opérateur utilisé entre les différents types ou rôles sélectionnés est l'opérateur de choix "OR". De ce fait, si plusieurs types de contenu ou rôles sont sélectionnés, l'auto-complétion se limitera au type de contenu commun le plus élevé entre toutes les valeurs sélectionnées. Par exemple, si dans les types de contenu, l'utilisateur sélectionne les tables de référence de l'offre de formation "Période" et "Domaine", seuls les champs venant du type de contenu commun à ses deux types seront utilisables (dans ce cas, ce sont les champs provenant du type "Table de référence ODF"). A défaut d'avoir un type de contenu commun, seuls les champs standard sont disponibles.

La recherche sur les rôles et types de contenu n'est pas stricte, c'est à dire qu'elle tient compte des héritages. Par exemple, dans l'offre de formation, tous les types de contenus héritent du type de contenu "Contenu ODF". Si ce type est sélectionné, tous les contenus ayant un type de contenu héritant de "Contenu ODF" seront remontés : ELP, Liste d'ELP, formation, etc.

Requête

Pour construire une requête, il est nécessaire de connaître la syntaxe globale d'une requête : opérateurs de comparaison et opérateurs logiques notamment. Mais cela n'est pas suffisant, il faut aussi comprendre le fonctionnement des suffixes ajoutés au nom des champs. L'auto-complétion sera d'une grande aide pour bien construire une requête.

Vous pouvez ensuite aller plus loin en faisant des requêtes jointées permettant de faire des recherches profondes.

Syntaxe

Par défaut, le requêteur est rempli avec la valeur suivante :

*:*      

Celle-ci permet de renvoyer tous les résutats sans aucun filtre.

Le séparateur entre un champ et une valeur est ":".

title:histoire      

title est le nom du champ et histoire est la valeur recherchée.

Comparaisons

Une expression exacte doit être mise entre guillemets.

title:"Licence Histoire"      

Il est possible de faire des intervalles de valeurs fermés ou ouverts, le séparateur entre les deux valeurs est le mot clef "TO".
Les crochets ("[" et "]") permettent d'inclure les valeurs des bornes.
Les accolades ("{" et "}") permettent au contraire d'exclure les bornes.
Une extrémité de l'intervalle peut être ouverte et l'autre fermée.

Filtre sur le champ "annee" dont la valeur est comprise entre 2008 et 2018 mais ne peut être égale à 2008 ou 2018 :

annee:{2008 TO 2018}     

Filtre sur le champ "annee" dont la valeur est inférieure ou égale à 2018 :

annee:[* TO 2018]     

Filtre sur le champ "annee" dont la valeur est strictement supérieur à 2008 :

annee:{2008 TO *]     

Grâce aux intervalles, il est également possible de tester si un champ est renseigné :

annee:[* TO *]     
Opérateurs logiques

Il existe classiquement 3 opérateurs logiques :

  • Concaténation "AND" ou "+"
  • Choix "OR" ou "(vide)"
  • Négation "NOT" ou "-"

Les opérateurs de négation déduisent une partie d'un ensemble de résultats. Il faut donc que la clause précédente exprime les résultats auxquels nous voulons appliquer la clause de négation. C'est pour cette raison que nous préfèrerons l'écriture de cette clause avec "-".

Il est important de séparer les groupes par des parenthèses ("(" et ")"), en particulier quand les opérateurs changent. Il peut être malin d'isoler chaque clause dans des parenthèses également.

Comme nous pouvons le voir dans la liste ci-dessus, il existe plusieurs manières d'écrire un groupe de clauses, nous pouvons utiliser la notation complète (AND, OR, NOT) ou abrégée (+, (vide), -). Les deux notations peuvent être mélangées.

Ces deux requêtes sont équivalentes (tous les contenus ayant pour titre "histoire" et pour description "art") :

(title:histoire) AND (description:art)     
+(title:histoire) +(description:art)     

Comme les trois qui suivent et qui mélangent les notations (tous les contenus ayant pour titre "histoire" et ayant un niveau mais n'ayant pas "archéologie" comme description) :

((title:histoire) AND (level:[* TO *])) -(description:archéologie)     
((title:histoire) AND (level:[* TO *])) NOT(description:archéologie)     
(+(title:histoire) +(level:[* TO *])) NOT(description:archéologie)     

Il est important de constater que l'opérateur négatif est toujours précédé d'un contexte. Si nous voulons obtenir tous les contenus dont le titre n'est pas "histoire", il faudra écrire ceci :

*:* -(title:histoire)     

Les opérateurs logiques peuvent également être utilisés dans les valeurs :

title:(+histoire -art)     
title:(histoire AND art)     
title:((histoire OR géographie) AND master)     
Recherches approximatives

Les recherches se font par termes exacts, mais il est possible d'ajouter des jokers à celles-ci. Il en existe de différents types et voici les principales :

  • "?" remplace un caractère inconnu

  • "*" remplace zéro à plusieurs caractères inconnus
  • "~[n]" où [n] est remplacé par un nombre et représente le nombre de caractères approchants ou la distance entre deux termes

L'expression suivante renvoie aussi bien tous les contenus dont le titre est "route", "roule", "rouge", etc. :

title:rou?e    

Celle-ci renvoie les contenus dont le titre est identique aux mots cités précédemment mais aussi des mots plus long ou plus courts comme "roue", "roulade", "rougie", etc. :

title:rou*e    

Cette nouvelle expression renvoie les contenus dont le titre est approchant à un caractère prêt comme "bouge", "route", "ronge", etc. :

title:rouge~1    

Il est aussi possible de définir la distance maximale entre deux termes. Dans cette expression, Solr nous renvoie les contenus dont le titre contient les mots "licence" et "histoire" avec une distance maximale de 10 caractères entre les deux termes.

title:"licence histoire"~10    
Poids dans les requêtes

Pour aider au tri des résultats par pertinence, la syntaxe des expressions Solr offre la possibilité d'ajouter des poids, appelés "boost", et représentés par le caractères "^".

(title:histoire)^1.5 OR (description:histoire)    

Ici, les résultats dont le titre est "histoire" seront plus pertinents que ceux dont la description est "histoire".

Suffixe d'un champ

Un champ présent dans Ametys peut être indexé de différentes manières dans Solr. Il est toujours suffixé, mis à part les champs standard. Ci-dessous, nous pouvons retrouver la liste des différents suffixes utilisés lors de l'indexation des données et qui devront donc être utilisés pour construire vos requêtes.

Chaque champ Solr peut être multivalué.

Le nom de base du champ est représenté par [fieldName].

Syntaxe

Commentaire

Exemple

Chaîne de caractères (string)

[fieldName]_s

Comparaison exacte (casse et accents pris en compte)

title_s:Géographie

[fieldName]_s_lower

Recherche sur la valeur du champ en minuscules

title_lower_s:géographie

[fieldName]_txt_fr

Recherche full-text (terme par terme, casse et accents ignorés)

title_txt_fr:GEOgraphie

Champs simples

[fieldName]_l

Entier (long)

duree_l:20

[fieldName]_d

Nombre décimal (double)

etcs_d:15

[fieldName]_b

Booléen (vrai/faux)

openToExchangeStudents_b:true

[fieldName]_dt

Date (datetime, valeurs au format ISO)

startDate_dt:2018-12-20T00:00:00.000Z

Champs complexes

[fieldName]_s

Contenu (comparaison sur l'identifiant)degree_s:"content://a52db23d-fbf2-42a6-98b4-384d3914aeb0"

[fieldName]_txt_stemmed_fr

Texte richepresentation_txt_stemmed_fr:geographie

[composite]/[fieldNameWithSuffix]

Champ composépilotage/pilotage_status_s:CFVU_VALIDATED
[fieldName]_geoCoordonnées géographiques (distance en kilomètres){!geofield sfield=geoCode_geo pt=45.62,-0.12 d=10}
Champs standard
contentLanguageLangue du contenucontentLanguage:fr
workflowStepEtat du workflow (long)workflowStep:3
creatorCréateur du contenu (login#population)creator:bmaurel#cms-users
contributorDernier contributeur (login#population)contributor:bmaurel#cms-users
creationDateDate de créationcreationDate:2018-12-20T00:00:00.000Z
lastModifiedDate de dernière modificationlastModified:2018-12-20T00:00:00.000Z
lastValidationDate de dernière validationlastValidation:2018-12-20T00:00:00.000Z
full_frRecherche dans tous les textes, textes riches et documents du contenu (pas d'auto-complétion)full_fr:psychologie

Recherche full-text
En full-text, chaque mot du champ est recherché de façon indépendante contrairement aux autres types de recherches où c'est la valeur complète qui est recherché. Ainsi, il est possible de rechercher sur un ou plusieurs mots du champ.

Coordonnées géographiques
La syntaxe présentée ci-dessus pour les coordonnées géographiques n'est pas disponible dans l'auto-complétion mais peut tout de même être utilisée dans le requêteur Solr.
Paramètres :
 > sfield est le champ sur lequel on effectue la recherche
 > pt permet de définir une coordonnée géographique de départ
 > d est le rayon de recherche en kilomètres autour de ce point

Champs standard (aussi appelés champs systèmes)
Tous les champs systèmes ne sont pas présentés ici, certains champs sont disponibles uniquement avec certains plugins, il n'est donc pas pertinent d'en faire une liste exhaustive.
Ils sont visibles via auto-complétion et ne sont pas suffixés. Leur type est noté entre parenthèses dans l'auto-complétion, il suffit donc de s'y référer et de les traiter comme n'importe quel champ mais sans suffixe.

Requêtes jointées

Pour faire des expressions prenant en compte des valeurs contenues dans des repeaters ou des contenus liés, il existe les requêtes jointées.

Elles sont accessibles via l'auto-complétion directement en tapant le nom du champ du repeater, mais pas pour les contenus liés. Cependant, le mot clef "join" permet de construire automatiquement la syntaxe d'une requête jointée :

{!ametys join= q=""}    

Celle-ci est composée de deux paramètres :

  • "join" qui indique le chemin vers le champ repeater ou contenu
  • "q" pour la sous-requête, ce paramètre est facultatif
{!ametys join=internshipDescription q="period_l:4"}    

Cette expression permet de rechercher tous les contenus dont la période de stage se déroule au moi d'avril.

Il existe une autre manière d'écrire les clauses de restriction en utilisant des crochets ("[" et "]") pour y mettre la clause :

{!ametys join=internshipDescription[period_l:4]}    

Enfin, pour faire des jointures à plusieurs niveaux, il suffit d'utiliser "->" pour explorer les champs.

Pour rechercher les responsables d'une formation dont le nom commence par "a" :

{!ametys join=personInCharge->persons q="givenName_txt_fr:a*"}    

Il est possible de mélanger les clauses entre crochets et les clauses dans le paramètre q par exemple pour rechercher toutes les personnes dont le rôle est "responsable" et dont le nom commence par "a" :

{!ametys join=personInCharge[role_s:responsable]->persons q="givenName_txt_fr:a*"}    

A tous les niveaux des jointures, l'auto-complétion reste disponible en prenant bien en compte le contexte courant.

Colonnes et facettes

Les valeurs affichées dans les colonnes et facettes des résultats de recherche sont extraites directement du contenu et non du serveur d'indexation. C'est pour cela qu'il n'y a pas de suffixe aux noms des champs comme dans les requêtes Solr.

Les champs sélectionnés sont séparés par des virgules.

Pour faire une recherche en profondeur (exploration d'un champ complexe (composite, repeater, contenu)), il est nécessaire d'utiliser le séparateur "." entre chaque niveau.

Le libellé affiché pour chacun des éléments colonne ou facette est par défaut le libellé du champ dans Ametys.

Colonnes

Ce champ représente la liste des colonnes affichées dans les résultats de recherche.

Une colonne peut être renommée pour avoir un nom plus explicite ou plus complet grâce au mot clef "AS".

Si ce champ est laissé vide, ce sont les colonnes "Titre", "Date de création", "Dernière modification", "Dernier contributeur", "Créateur", "Etat", "Langue", "Type(s) de contenu" et "Rôle(s) strict(s)" qui sont affichées.

 Pour afficher les colonnes "Titre", "Code" (de la nature de l'ELP) et "Volume horaire" :

title, courseType.code, nbHours

Cependant, pour être plus précis sur le titre de la deuxième colonne, il est possible de faire ceci, ainsi nous aurons les colonnes "Titre", "Nature" et "Volume horaire" :

title, courseType.code AS Nature, nbHours

Le symbole "*" a également été intégré afin d'afficher toutes les champs du contenu :

*

Il est possible d'aller plus loin en n'affichant que les champs d'un contenu lié ou d'un champ composé (multiple ou non), par exemple en affichant le titre, le détail des composantes et le détail de l'illustration d'une formation :

title, orgUnit.*, illustration.*

Facettes

Les facettes permettent de faire des filtres rapides et dynamiques sur les valeurs d'un champs, ainsi il est facilement possible de filtrer des contenus selon des valeurs de champs standard (type de contenu, langue, état de workflow, orphelin, etc.) ou du modèle (nature, catalogue, etc.). Elles sont pré-calculées au moment de la requête.

Dans cet élément, seuls les champs ayant un nombre de valeurs limité peuvent être sélectionnés. Ce sont les champs énumérées, les contenus, les utilisateurs et les booléens. Par exemple, il est impossible d'avoir une facette sur le titre (title). Si une donnée avec des valeurs non limitées est choisie, elle sera ignorée.

Dans l'exemple suivant fait sur le type de contenu de l'offre de formation "ELP", seul les facettes "Catalogue" et "Contributeur" sont calculées :

catalog, courseType.code, contributor, title      

Mais il est possible d'afficher la facette "Nature" car elle est elle-même un contenu ou une sous-donnée limitée de celle-ci :

catalog, courseType, contributor, courseType.contributor      

Si ce champ est laissé vide, aucune facette n'est calculée.

Liens utiles

Documentation Solr 7.5

Tutoriel de syntaxe Solr

 

Retour en haut