C’est un fichier xml dont la racine est <config>. Sa structure et un certain nombre d’éléments sémantiques sera vérifiée par le schéma « config.xsd ».
Sommaire
Index Textuel Elasticsearch
Index Facette
<index>
<name>nom</name>
<type>string</type>
<xpath>modsCollection/mods/name/namePart</xpath>
<recherchesimple>yes</recherchesimple>
<rechercheavancee>yes</rechercheavancee>
<recherchevocabulaire>yes</recherchevocabulaire>
<autocomplete>3</autocomplete>
<poids>30</poids>
<analyse>asciifolding_lowercase</analyse>
<analyse>english_stemming</analyse>
<analyse>exact</analyse>
<analyse>riche</analyse>
<analyse>ducet_sort</analyse>
<sort ordre="1">descending</sort>
<sortlist>ascending</sortlist>
<idtraduction>nomtrad</idtraduction>
</index>
C’est le nom de l’index tel qu’il sera utilisé dans Elasticsearch. Ce nom doit être un mot unique ne comportant que des lettres minuscules sans aucun caractère spécial ou accentué.
Balise obligatoire.
Exemples : <name>title</name> , <name>auteur</name>
Type de données indexées. Deux valeurs possibles :
Balise obligatoire.
Une expression XPath permettant de retrouver dans la notice xml complète la valeur qui sera indexée. Cette expression doit respecter la syntaxe XPath, ce qui sera vérifié lors du contrôle d’intégrité du fichier config.xml
Si, lors de l’indexation, cette expression pointe sur un nœud inexistant, rien ne sera indexé.
Il est possible d’indiquer pour un même index plusieurs balises <xpath>, chacune d’elle pointant sur un nœud particulier. Il est ainsi possible d’indexer plusieurs informations différentes dans un même index Elasticsearch.
Au moins une balise <xpath> est obligatoire pour un index donné.
Exemples : <xpath>modsCollection/mods/name/namePart</xpath>
<xpath>modsCollection/mods/identifier[@type=’doi’]</xpath>
Pour indiquer si cet index doit être pris en compte dans la recherche simple.
Deux valeurs possibles : « yes » ou « no »
Balise obligatoire.
Exemple : <recherchesimple>yes</recherchesimple>
Pour indiquer si cet index doit apparaître en tant que saisie particulière pour cet index dans la page présentant la recherche avancée. Son nom traduit (voir ci-dessous) apparaîtra alors dans la liste déroulante.
Deux valeurs possibles : « yes » ou « no »
Balise obligatoire.
Exemple : <rechercheavancee>yes</rechercheavancee>
Pour indiquer si cet index doit apparaître en tant qu’index dans lequel il sera possible de faire une recherche dans les pages présentant l’équation de recherche par vocabulaire. Son nom traduit (voir ci-dessous) apparaîtra alors dans la liste à cocher.
Deux valeurs possibles : « yes » ou « no »
Balise obligatoire.
Exemple : <recherchevocabulaire>yes</recherchevocabulaire>
Cette balise ne concerne qu’un index présenté en recherche avancée. Elle sert à indiquer que l’ergonomie doit permettre une saisie par auto complétion dans la zone de saisie. Elle indique par ailleurs le nombre de caractères de saisie au-delà duquel l’auto complétion se déclenche. Une valeur de 3 voudra dire que l’auto complétion se déclenche dès la saisie du 4ème caractère.
Balise facultative. Si elle est présente on vérifie que l’index est déclaré en recherche avancée (erreur sinon).
Exemple : <autocomplete>3</autocomplete>
Sert à donner la valeur qui multipliera (boost) le scoring pour favoriser une recherche trouvée, simple ou avancée, dans cet index. On applique un effet multiplicateur.
Balise facultative. Si non présente, aucun boost n’est appliqué sur le scoring.
Exemple : <poids>30</poids>
Cette balise sert à indiquer les traitements linguistiques qui sont mis en œuvre pour un index. Ils sont directement liés aux possibilités du moteur de recherche Elasticsearch.
Valeurs possibles.
« asciifolding_lowercase » : signifie qu’avant indexation, et pour chaque recherche, on transforme les caractères « accentués » en leur équivalent ASCII non-accentué (asciifolding) et que toutes les majuscules sont transformées en leur équivalent en minuscule (lowercase). Nous n’avons pas séparé ces deux fonctions car il s’agit là d’un traitement communément appliqué pour permettre une saisie moins contraignante à l’utilisateur final. On crée alors un sous-index « fold ».
« english_stemming » : application de l’algorithme de stemming de Porter. Permet notamment d’indexer un mot sous sa forme singulier ou sa forme plurielle sous une même forme, ce qui peut être intéressant pour certaines recherches documentaires. Ce cas est intéressant pour les champs textuels mais c’est un compromis car cela génère du bruit documentaire. On crée alors un sous-index « stem »
« exact » : signifie que la valeur exacte du mot ou de l’ensemble de l’information, c’est-à-dire notamment avec les caractères accentués, est indexée et recherchée. Cette valeur est obligatoire pour les facettes et pour les « sortlist » et « sort » si l’index est d’un type différent de « string » donc a priori de type « date ». On crée alors un sous-index « raw ».
« riche » : signifie que l’on peut rechercher précisément avec tous les caractères accentués. Contrairement à « exact » ici l’information est coupée en mots. Cette analyse devrait être utile pour des recherches en français par exemple, même si on a également mis l’analyse « asciifolding_lowercase » le mot trouvé serait alors valorisé deux fois. Permet par exemple de différencier « télécommunication » (français) de « telecommunication » (anglais) au cas où ces deux langues peuvent avoir été indexées ensemble. On crée alors un sous-index « rich ».
« ducet_sort » : signifie que la valeur entière du mot ou de l’ensemble de l’information est analysée sans découpage pour pouvoir être triée. De plus une table de caractères unicode DUCET (Default Unicode Collation Element Table) est utilisée pour tenir compte autant que possible des majuscules, des accents ou des caractères spéciaux. Cette valeur est obligatoire pour les index avec une balise « sortlist » ou « sort » si celui-ci est de type « string ». On crée alors un sous-index « sort ».
Remarque :
On peut indiquer pour un même index plusieurs balises <analyse>, une pour chacune des valeurs ci-dessus. C’est un processus transparent pour l’utilisateur final. Techniquement, pour chaque analyse, on crée un sous-index pour l’index dont le nom est donné dans la balise <name> et, pour chaque recherche saisie, on scrute toujours tous les sous-index, ce qui influence le scoring pour le champ si la valeur saisie est trouvée dans chacun des sous-index. Cela permet de contrebalancer le bruit documentaire en cas de stemming si on a choisi aussi l’analyse « exact » puisqu’un terme trouvé exactement, et par stemming, valorisera (scoring) plus fortement le document qui le contient que si seule la forme « stemmée » a été trouvée, les documents sortant alors en premiers dans la liste des résultats de recherche.
Attention à ne pas systématiquement employer les cinq analyses car cela augmente d’autant la taille finale des index ce qui peut s’avérer délicat pour l’indexation de dizaines de millions de notices. De plus l’analyse « ducet_sort » n’est utile que pour les tris pour un index de type « string ».
Contrôle.
Au moins une balise <analyse> est obligatoire.
Si l’index est aussi une facette ou si l’index est utilisé dans un tri (« sort » ou « sortlist ») et s’il est de type « date », l’analyse « exact » est obligatoire.
Si l’index est de type « string » et s’il est utilisé dans un tri (« sort » ou « sortlist ») l’analyse « ducet_sort » est obligatoire.
Exemples :
<analyse>asciifolding_lowercase</analyse>
<analyse>english_stemming</analyse>
<analyse>exact</analyse>
Cette balise mise pour un index indique que les résultats affichés dans la page web « liste de résultat pour une recherche » seront triés avec la valeur de cet index.
Cette balise ne sert pas à trier les valeurs affichées dans une facette qui seront toujours triées dans l’ordre descendant du nombre de documents trouvés pour chaque valeur de la facette.
Il est possible de trier avec plusieurs index ; c’est pourquoi la balise <sort> comprend un attribut « ordre » qui vaut 1,2,… qui est l’ordre avec lequel sont triés les résultats, sachant que le tri en majeur est toujours fait par le scoring.
Balise facultative. Si elle est présente :
Par ailleurs un test d’intégration est fait au cas où plusieurs index auraient une balise « sort » pour vérifier qu’il en existe au moins une dont l’ « ordre » vaut 1 et que la succession des nombres indiqués dans les « ordre »s trouvés dans les autres index est l’ordre naturel des nombres (1,2,3,…)
Exemple : <sort ordre= »1″>descending</sort>
Rappel : si l’index est de type « string » une balise <analyse> avec la valeur « ducet_sort » doit être présente et avec la valeur « exact » s’il est de type « date »; cette balise <analyse> est obligatoire.
Cette balise mise pour un index indique que cet index pourra être utilisé dans un tri par l’utilisateur final dans le front office dans la page « affichage de la liste de résultats suite à une recherche ». La présence de cette balise conditionne l’affichage dans la liste déroulante de tri dans cette page.
La balise indique si le tri est ascendant ou descendant.
Exemple : <sortlist>ascending</sortlist>
Rappel : si l’index est de type « string » une balise <analyse> avec la valeur « ducet_sort » doit être présente et avec la valeur « exact » s’il est de type « date » ; cette balise analyse est obligatoire.
Contient un mot, qui est un identifiant permettant de retrouver toutes les traductions du nom de l’index, tel qu’il sera affiché dans la liste des index en recherche avancé s’il y figure ou en tête d’affichage d’une facette ainsi que dans le choix d’indexes possibles pour la recherche par vocabulaire. Pour chaque identifiant on doit retrouver une entrée dans le fichier traduction.xml (voir ci-dessous).
Balise obligatoire si l’index est en recherche avancée ou s’il s’agit d’une facette. Le nom saisi doit être sans caractères spéciaux ou accentués, donc en caractères lettres ou chiffres ASCII, en minuscules et/ou majuscules.
Exemple : <idtraduction>titre</idtraduction>
Que l’on retrouve dans l’attribut « id » dans le fichier traduction.xml :
<xmldata id="titre">
<translation lang="fr">titre</translation>
<translation lang="en">title</translation>
</xmldata>
Vérification qu’au moins un <index> est présent, et qu’il est autorisé en recherche simple.
Vérification que les balises sont dans l’ordre suivant et avec le nombre d’occurrences indiqué :
<« name » minOccurs= »1″ maxOccurs= »1″>
< « type » minOccurs= »1″ maxOccurs= »1″>
< « xpath » minOccurs= »1″ maxOccurs= »unbounded »>
< « recherchesimple » minOccurs= »1″ maxOccurs= »1″/>
< « rechercheavancee » minOccurs= »1″ maxOccurs= »1″/>
<recherchevocabulaire>no</recherchevocabulaire>
< « autocomplete » minOccurs= »0″ maxOccurs= »1″/>
<« poids » minOccurs= »0″ maxOccurs= »1″/>
< « analyse » minOccurs= »1″ maxOccurs= »unbounded »/>
< « facet » minOccurs= »0″ maxOccurs= »1″>
< « sort » minOccurs= »0″ maxOccurs= »1″>
< « sortlist » minOccurs= »0″ maxOccurs= »1″/>
< « idtraduction » minOccurs= »0″ maxOccurs= »1″/>
Une facette est un index au sens Elasticsearch et devra donc être déclarée comme telle. L’index correspondant peut être utilisé dans une recherche simple ou une recherche avancée en plus d’être une facette mais ce n’est pas obligatoire. Mais comme pour tous les index les balises <recherchesimple>, <rechercheavancee> et < recherchevocabulaire> devront être présentes.
Un index apparaît comme étant une facette s’il possède une balise du type
<facet ordre="1" affichage="yes" exportCSV="yes" cartePays="no">5</facet>
La valeur « 5 » indique le nombre de valeurs de l’index qui seront affichées dans la facette. Si la facette présente plus de valeurs un ascenseur apparaitra lors de l’affichage de la facette.
L’attribut « ordre » permet de paramétrer dans quel ordre sont affichées les facettes dans la page web « liste de résultats ».
L’attribut « affichage » permet de savoir quel comportement par défaut s’applique lors de l’affichage de la facette :
L’attribut « exportCSV » permet d’afficher un bouton pour la facette permettant d’exporter le liste de valeurs de la facette sous la forme d’un fichier CSV comportant les couples « valeur »-« nombre de notices ». Valeur « yes » le bouton est affiché, valeur « no » à pas de bouton.
L’attribut « cartePays » permet d’afficher un bouton pour la facette permettant de visualiser les valeurs de la facette dans une carte. Valeur « yes » le bouton est affiché, valeur « no » à pas de bouton. La carte est ouverte dans une nouvelle fenêtre du navigateur.
Contrôle :
Il peut n’y avoir aucune facette.
Balise obligatoire pour une facette. Vérification que la valeur indiquée est un nombre. Vérification que l’attribut « ordre » est présent et qu’il vaut au moins 1.
Les attributs « affichage », « exportCSV » et « cartePays » sont obligatoires.
Par ailleurs un test d’intégration est fait au cas où plusieurs index auraient une balise « facet » pour vérifier qu’il en existe au moins une dont l’ « ordre » vaut 1 et que la succession des nombres indiqués dans les « ordre »s trouvés dans les autres index « facette » est l’ordre naturel des nombres (1,2,3,…)
Par ailleurs vérification qu’une balise <analyse> est présente avec la valeur « exact », ce qui est obligatoire pour une facette.
Par ailleurs vérification qu’une balise <idtraduction> est présente puisqu’une facette est toujours affichée avec une entête donnant le nom de l’information utilisée, récupérée en fonction de la langue dans le fichier traduction.
Exemple :
<index>
<name>annee</name>
<type>date</type>
<xpath>modsCollection/mods/originInfo/dateIssued</xpath>
<recherchesimple>yes</recherchesimple>
<rechercheavancee>no</rechercheavancee>
<poids>1</poids>
<analyse>exact</analyse>
<facet ordre="1" affichage=="yes" exportCSV="yes" cartePays="no">5</facet>
<idtraduction>annee</idtraduction>
</index>