Indexing - Les champs à indexer et à rechercher

La modification des champs indexés et recherchés dans le module ORI-OAI-indexing nécessite de modifier 2 fichiers :

  • [PATH_CUSTOM_CONFIG]/ori-oai-indexing/config/fieldsConfig.xml : fichier qui sert à parser une fiche de métadonnées et à remplir un champ SOLR à partir d'un xpath
  • [PATH_CUSTOM_CONFIG]/ori-oai-indexing/config/solr_home/prod-public/conf/schema.xml : fichier de configuration SOLR qui définit le schéma (liste des champs, type des champs, règles d'indexation et de recherche, etc.).

fieldsConfig.xml

Son rôle principal est de faire le lien entre la fiche XML associée à la ressource et les champs de l'index (définis dans schema.xml).

Description de la structure du fichier

<xml>
    <xmlFile ns="http://purl.org/dc/elements/1.1/" prefix="dc" boost="1.0">
        <additional_ns prefix="oaidc" URI="http://www.openarchives.org/OAI/2.0/oai_dc/"/>
	<fields>
            <field name="dc.title" xpathSelect="//dc:title[../dc:language='' or not(../dc:language) or not(starts-with(../dc:language, 'fr') or starts-with(../dc:language, 'en'))]" xpathId="selectDcTitle" boost="2"/>
            ...
        </fields>
			
	<transformations>
		<metadata format="vocabulary:search_transformation_languages" failOnError="false" xpathSelect="//dc:language"/>
		...
	</transformations>
    </xmlFile>
    ...
</xml>
  • xmlFile : décrit un format de fiche XML qui sera indexée
    • ns : l'espace de nom associé
    • prefix : le préfixe utilisé dans les noms de champ. Il correspond nom du format de la fiche (ex. ici DC).
    • boost : pour certains formats, il est possible de définir un "boost". Celui-ci sera pris en compte au moment de l'indexation et aura pour effet de donner un boost constant à un format donné. Par exemple si le format TEF contient un boost supérieur à 1 alors, lors de la recherche, ce format sera privilégié pour la pertinence des résultats par rapport aux autres ayant un boost inférieur ou inexistant.
  • field : décrit un champ de la fiche
    • name : le nom; Il doit obligatoirement avoir une entrée correspondante dans le fichier schema.xml.
    • xpathSelect : chemin dans lequel se trouve le champ dans l'arborescence de la fiche XML.
    • boost : pour certains champs, il est possible de définir un "boost". Celui-ci sera pris en compte au moment de l'indexation et aura pour effet de donner un boost constant à un champ donné. Par exemple si le champ dc.subject contient un boost supérieur à 1 alors, lors de la recherche, ce champ sera privilégié pour la pertinence des résultats par rapport aux autres ayant un boost inférieur ou inexistant.
  • transformations : permet de définir les règles de transformation en fonction des langues en vue de l'affichage de la notice dans le module ORI-OAI-search

Transformation des fiches

Chaque balise <metadata> permet de configurer une transformation avant affichage des métadonnées. Les attributs et configurations possibles sont les suivants:
format

Ceci renseigne le format du champ que l'on veut transformer. Il peut y avoir plusieurs types différents:

  • format="date:dd-MM-yyyy" pour transformer une date vers le format désiré. En prenant la configuration citée ici, le 22 juin 2005 sera affiché comme 22-06-2005.
  • format="vocabulary:identifiant_vocabulaire". Dans ce cas, la valeur retrouvée est cherchée en correspondance dans les valeurs du vocabulaire choisi. Lorsque cette valeur est trouvée, on affiche le libellé correspondant dans la langue sélectionnée dans l'interface. Par exemple, on spécifiera comme ceci le vocabulaire des langues: format="vocabulary:search_languages". Ceci peut être utilisée dans le cas de l'affichage de la langue de saisie d'une ressource pédagogique. Si la valeur fr-FR est retrouvée, elle sera automatiquement traduite en Français si on affiche en français, ou French si on affiche en anglais, etc.
  • format="size:search_traduction_size" permet d'afficher une taille de fichiers en octets. search_traduction_size étant le vocabulaire permettant de traduire les termes bytes, Kb, Mb, etc.
  • format="time:search_traduction_time" permet d'afficher une durée de type P1Y2M3DT4H5M6S. search_traduction_time étant le vocabulaire permettant de traduire les termes year, month, hour, etc.
  • format="xml" pour créer de vrais noeuds XML exploitables par une future XSL lorsque le champ contient du XML en dehors de l'espace de nom

metadataDateFormat

Cet attribut permet de dire dans quel format est stockée la date. Par exemple metadataDateFormat="yyyy-MM-dd". Pour dire que la métadonnée que l'on récupère est de la forme 2005-06-22 .

xpathSelect

Le contenu est lui un chemin xpath correspondant au chemin de la métadonnée dans la fiche XML.

vcard

Vaut true ou false.
On indique ici que la métadonnée contient une vcard. Cette vcard est alors transformée en XML dans la fiche de métadonnée.

vcardAttribute

Dans le cas où la métadonnées est une vcard, on spécifie ici l'attribut de cette vcard sur lequel on veut construire le lien.

failOnError

Vaut true ou false.
Dans le cas où on n'arrive pas à "traduire" un champ, on déclenche une erreur. Dans ce cas, cet attribut permet de dire si cette erreur est bloquante et si on doit considérer que cette fiche n'est pas complètement transformée et qu'on doit retenter ou non sa transformation plus tard.

Ajout de liens vers une autre notice

Il est possible pour certaines métadonnées d'ajouter un lien dans l'interface pour rebondir vers une autre notice. Par exemple, lors de l'utilisation des relations dans le format LOM.
Le concept est le suivant:

  • Une fiche A contient une métadonnée /mon/xpath/M1 qui a pour valeur 123
  • Cette même fiche A contient une métadonnée /mon/xpath/ML qui a pour valeur le libellé correspondant à la métadonnée /mon/xpath/M1
  • Une fiche B contient une métadonnée /monautrexpath/M2 qui a pour valeur 123
  • Nous pouvons donc proposer dans l'affichage de A un lien vers la fiche unique B par la configuration suivante:

    <metadata xpathSelect="/mon/xpath">
    	<record_link key="lom_relation" labelXpath="lom:description/lom:string" labelMetadataNameInTarget="lom.general.title" languageTypeForLabelMetadataNameInTarget="true" typeXpath="../lom:kind/lom:value" targetXpath="lom:identifier/lom:entry" metadataNameInTarget="lom.general.identifier.entry||lom.technical.location"/>
    </metadata>
    

Ceci se spécifie dans une sous-balise de <metadata>/<record_link>. Les attributs de <record_link> sont les suivants:

 

key

Cette clef doit être unique pour tout le format et est utilisée dans la XSL pour identifier les liens HTML à afficher. Elle sera utilisée par l'attribut ori-notice-link-key dans la XSL.

labelXpath

Cette variable permet de dire le xpath où se trouve le libellé à afficher sur le lien dans la fiche d'origine. Attention, le xpath est relatif au xpath défini dans la balise metadata.

labelMetadataNameInTarget

Dans le cas où il n'y a pas de libellé dans la fiche à partir de laquelle on veut faire un lien, on peut aller chercher un libellé dans la fiche visée. Pour cela définir ici le champ contenant le libellé.

languageTypeForLabelMetadataNameInTarget

Dans le cas où on passe par l'attribut labelMetadataNameInTarget, cet attribut permet de dire si le champ est décliné en différentes langues.

typeXpath

Cette variable doit contenir le xpath dans lequel se trouve la valeur qui permettra de définir le type de relation.

targetXpath

Cette variable doit contenir le xpath dans lequel se trouve la valeur qui permettra de rebondir vers l'autre fiche. Attention, le xpath est relatif au xpath défini dans la balise metadata.

metadataNameInTarget

Cette variable contient le nom de la métadonnée qui contient la valeur désirée dans la fiche visée.
On peut définir successivement plusieurs métadonnées. Pour cela, séparer par la chaîne "||".

schema.xml

Propre au moteur d'indexation Solr, il définit les différents champs de l'index (type de données, tokenizer / filtre à appliquer...).
Se reporter à la documentation SOLR pour plus de précisions sur la syntaxe de ce fichier.

Les types de champs

Chaque champ possède comme attribut un type. Ce type va indiquer à Solr quel traitement il devra effectuer lors de l'indexation et lors de l'exécution d'une requête. Voici les types principaux :

  • string : ne fait rien, prend l'entrée sans la transformer.
  • text
    • découpe, à partir des espaces, l'entrée en tokens.
    • ignore le HTML.
    • traite les mots composés : exemples : "wi-fi" => "wi", "fi" / "sd500" => "sd", "500".
    • retire les "stop words" (ex. le, la, et, de ...) en français et en anglais.
    • convertit en minuscules.
  • text_fr : même chose que text mais n'applique que les "stop words" français, supprime les accents et utilise le "stemming" (extraction de la racine du mot).
  • text_en : idem text_fr mais en version anglaise.
  • proper_noun : utillisé pour les noms propres. Il fait la même chose que le type text mais sans "stop words".

Les copyFields

Il existe des champs particuliers nommés copyFields. Ils sont utilisés pour effectuer des traitements différents sur un même contenu.

Par exemple :

<copyField source="lom.general.title" dest="lom.general.title_tag"/>

Copie le contenu de lom.general.title dans lom.general.title_tag. lom.general.title est de type text alors que lom.general.title_tag est de type text_tag. Ces deux champs ont donc le même contenu mais sont analysés différemment.

Remarques

  • Si on ajoute un champ dans fieldsConfig.xml, alors on doit obligatoirement l'ajouter également dans schema.xml.
  • Il n'est pas toujours possible d'affecter un boost à un champ. Il faut veiller à ce que le champ correspondant dans le fichier schema.xml n'ait pas l'attribut omitNorms=true ou ne fasse pas référence à un type qui lui-même déclarerait omitNorms=true.
  • Il n'est pas possible d'effectuer de tri sur un champ multivalué (attribut multiValued="true" dans le fichier schema.xml).
  • Dans schema.xml a été créé un champ title_sort  pour effectuer un tri quelque soit le format de la fiche (DC, LOM...). Ce champ est affecté grâce à sa définition dans le fichier fieldsConfig.xml (xpathSelect).

Dans le cas de modification d'un champ (nom, xpath, boost, etc.) ou d'ajout d'un champ : il est nécessaire de réindexer l'ensemble des documents.

  • No labels