Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Sdx facet

De AJLSM
Aller à la navigation Aller à la recherche
Notice :
La compréhension de cette page nécessite de comprendre au préalable le fonctionnement du système de facet dans les nouvelles versions de lucene; ainsi que, la bonne maitrise de SDX de façon générale..

Logique générale: lors du processus de publication on écrit les index traditionnel. On écrit aussi et indépendamment des index de type facet. Lors des requêtes sur les résultats de recherche, on fait une requête sur les index et une sur les index de type facet.

La class fr.gouv.culture.sdx.search.lucene.FacetList

[modifier | modifier le wikicode]

Comme pour la liste des index, cette classe correspond à une List Java contenant les champs qui peuvent être utiliser comme facet. Cette class est initialisée dans fr.gouv.culture.sdx.application.Application en même temps que l’application SDX et les index Lucene traditionnel. Cette classe (ou une de ces instances) est appelé à chaque fois que SDX travaille avec les facets.

NB: Il se pourrait que les lenteurs (notamment à la publication) viennent de cette classe. En effet, en travaillant, la doc, j’ai l’impression que la classe est instanciée à chaque requête liées aux faces; alors-qu’elle ne devrait être instancié qu’une fois, à l’initialisation de SDX.


Les Facets et le processus de publication.

[modifier | modifier le wikicode]

Le processus de publication de base de SDX n’a pas changé. La seule évolution vient du fait que juste après l’écriture des index lucéne d’un document, on écrit les facet pour les champs qui sont référencés dans l’objet FacetList. La classe facet fr.gouv.culture.sdx.search.lucene.query.LuceneFacet s’occupe de l’écriture des index facet. Elle travaille beaucoup avec l’objet CategoryPath proposé par lucene et qui permet de mettre une hiérarchie dans les index Facet. Actuellement, dans SDX, on ne gère qu’un niveau (champs-valeur). Cela permet de régler le problème de la recherche fédérée en mode multibase.

Pour écrire dans les index facet, la méthode est la même que pour les index classique de lucene. On travaille ainsi avec un objet IndexWriter. Pour les autres détails, voir la document concernant lucene, notamment, l’utilisation de l’objet TaxonomyWriter qui constitue le trait d’union entre les objets CategoryPath contenant les facet et l’indexWriter qui pointe sur les index facet déjà existant.

L’appel (ou l’initialisation) de la class LuceneFacet; ainsi que LuceneIndex (pour les index classiques) se fait dans la classe fr.gouv.culture.sdx.documentbase.LuceneDocumentBase.


Les facets et le processus de recherche

[modifier | modifier le wikicode]

Comme pour le processus de publication, le processus de recherche dans les index lucene classique n’a pas changé. La recherche dans les index facet ne se déclenche que si dans une requêtes de recherche, on envoie dans le paramètre « facets », une liste de champs. Dans ce cas, le traitement se déroule en deux étapes. D’abord, une recherche classique est lancée et le résultat se trouve dans l’objet Results. Ensuite, avec cette objet, on lance une requête pour reccupérer la liste des facets correspondant aux résultats dans l’objet fr.gouv.culture.sdx.search.lucene.query.FResults. Cette class est une fille de Results. Sa seule particularité est qu’elle ajoute dans le flux XML de sortie des résultats de recherche, une section contenant la liste des facets correspondant aux résultats de recherche.

En résumé, si la requête de recherche contient le paramètre « facets », on lance une requête classique et une recherche de type facets; on mix ensuite les résultats. Sinon, on lance uniquement une recherche classique.


Paramétrage et utilisation des facet dans pleade.

[modifier | modifier le wikicode]

L’exploitation des facets dans pleade se fait en deux étapes.D’abord, il faut configurer pour chaque base, la liste des champs qui sont « facetable ». Ensuite, dans les formulaire de recherche, il faut lister les champs que l’on souhaite voir dans les résultats de recherche.

Paramétrage des facets par base

[modifier | modifier le wikicode]

Comme pour la liste des index, pour chaque base, il faut définir la liste des champs qui peuvent être « facetable ». C’est cette liste qui va peupler l’objet FacetList dans SDX.

La configuration peut se faire de deux manière. D’abord dans le fichier <base>-documentbase.xonf en ajoutant une section facetList ayant un id et contenant pour chaque champs un élément field avec le nom du champs.

  <facetList id="mets-facetslist">
    <field name="dcsource" />
    <field name="dctitle" />
    <field name="dcidentifier" />
    <field name="udate" />
    <field name="user-id" />
    <field name="fgeognames" type="maps" />
  </facetList>

L’autre méthode consiste à créer un fichier <base>-facetlist.xconf qui contient la même section facetList que tout à l’heure. Dans cette méthode l’élément id est très important car il faudra le référencer dans le fichier <base>-documentbase.xonf à la section documentbase en ajoutant un élément facetList

<facetList ref="mets-facetslist" />

Il faudra en outre avec cette méthode référencer aussi la facetList dans le fichier application.xonf. En ajoutant une section facetlists pour inclure le fichier contenant la liste des facet

  <facetLists>
    <xi:include href="cocoon:/conf/ead-facetlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
  </facetLists>

NB: Pour les champs de type facet qui doivent être traiter avec le module maps de pleade, il faut ajouter en plus l’attribut type qui est positionné sur maps.

Si la liste des facet est vide ou non définie, cela équivaut à ne pas activer le module facet pour la base concernée.

Il faudra bien choisir la liste des champs « facetable ». Car, tout changement nécessite une ré-indéxation complète des documents pour la base concernée.

Paramétrage des formulaires de recherche

[modifier | modifier le wikicode]

Le paramétrage consiste à choisir les champs qui vont s’afficher dans le blocs prévue pour les facets. à condition aussi que ces champs soient définie au préalable comme étant « facetable ». De façon générales, tout les éléments « key » (sauf ceux de type fulltext) d’un formulaire de recherche avancé sont considérée comme devant s’afficher dans le bloc facet. Pour les éléments key de type date c’est le champs udate qui sera utilisé.

Pour éviter qu’un élément key ne s’affiche pas dans le bloc facet, il suffit juste de lui ajouter l’attribut facet-filter qui sera positionné sur false.

<key type="cdc" help="true" facet-filter="false"/>

Pour forcer un champs à apparaître comme facet dans les résultats de recherche, il faut utiliser, dans le formulaire de recherche, au même niveau que les éléments key, l'élément *facet-filter*. Cette élément doit contenir un attribut field qui correspond à l'index que l'on veut forcer comme facet. Exemple:

<facet-filter field="uunitid"/>

Pour le cas particulier du formulaire simple qui existe dans le fichier menu.xonf. Lorsque l’on souhaite avoir un bloc facet dans la page des résultats de recherche, il suffit d’ajouter un attribut facet à l’élément item le plus internet. L’attribut facet contiendra la liste des champs à traiter séparée par le caractère ; (point virgule).

<item type="txt">
      <i18n:text key="menu.simple-search.intro">recherche simple</i18n:text>
      <item id="simple-search" type="simple-search" action="results.html" method="get" base="ead mets oai_dc qdc" facets="fpersname;fsubject;udate;fgeognames;uunitid;dcdate;user-id" />
    </item>

En mode multibase, même si sémantiquement les contenus peuvent être différents, il suffit d’avoir les mêmes nom de champs « facetable » entre base pour que lors de l’affichage des résultats de recherche fédérée, le rendu du bloque facet se fasse de façons homogène entre les différentes base.