sdx-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sdx-users] RE: [sdx-developers] sdx indexation


From: Pierrick Brihaye
Subject: Re: [sdx-users] RE: [sdx-developers] sdx indexation
Date: Tue, 18 May 2004 11:02:36 +0200
User-agent: Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.6) Gecko/20040113

Bonjour ?

MARCHAIS Sébastien a écrit :

??? Si j'extrapole l'URL donnée par rapport à ce que sait faire eXist (p.e.
http://130.83.186.203/exist/servlet/db/shakespeare/plays/), on obtient un
document XML donnant une liste de ressources, non ?

oui, c'est un fichier qui décrit les ressources qu'il y a dans la collection.
j'aimerais pouvoir indexer tous les documents qui sont décrit par une ressource 
de ce fichier XML, et ainsi utiliser l'option batch pour diminuer mes temps 
d'indexation.

OK.

Bon, voici une façon de faire :

1) vous interrogez votre serveur
2) vous récupérer la liste de ressources
3) vous la mettez dans un DOM
4) vous parcourez votre DOM
4.1) vous comptez le nombre de documents
4.2) vous créez un tableau de Document (v. javadocs)
4.3) pour chaque ressource
4.3.1) vous créez le XMLDocument n° X
4.3.2) vous lui passez l'URL de la ressource N° X
5) vous appelez addDocument sur une DocumentBase en passant le tableau de XMLDocuments préalablement rempli.

En une cinquantaire de lignes de code au sein d'un élément <xsp:logic>, ça devrait le faire.

Bien sûr, rien ne vous empêche de coder ça dans une logicsheet ad hoc (ou dans sdx-actions.xsl), au sein d'une action que vous appeleriez <sdx:uploadXindiceCompliantRessourceList> et de reconstruire SDX avec cette logischeet.

Il y en a une autre, bien plus astucieuse et tout à fait dans l'esprit SDX :

Vous indexez votre liste de ressources et, lors de son indexation (via une XSL), vous faites un <xsl:for-each> sur chaque <exist:resource> (pour reprendre l'exemple eXist).

A partir de là, vous créez un sous-document (<sdx:document id="{ce_que_vous_voulez}"> dont le contenu sera un <xsl:copy-of select="document('un_chemin_complet_vers_la_ressource')/>. A titre indicatif, je vous recommande néanmoins de tester si document('un_chemin_complet_vers_la_ressource') retourne bien quelques chose : en effet, dans une XMLDB, une ressource listée peut très bien ne pas être accessible.

Note : pour une XSL d'indexation générant des sous-documents, v. http://savannah.nongnu.org/cgi-bin/viewcvs/sdx/demos/quran/conf/indexer.xsl?rev=1.1&content-type=text/vnd.viewcvs-markup.

Rien ne vous empêche par la suite de générer dans un élément de pipeline suivant les <sdx:field> nécessaires à chaque ressource.

Cette approche intéressante mais a des effets de bord qui peuvent être gênants :

1) vous entrez dans une SDX des documents qui sont des listes de ressources alors que vous n'en avez peut-être pas besoin. IMHO, il suffit de les mettre dans une base que vous n'interrogerez jamais :-)

2) les "sous-documents", qui sont probablement *vos* documents, ont une durée de vie fortement liée à la liste qui les a retournés. SDX ne propose pas (encore) de mécanisme qui permettrait de détacher un sous-document (la ressource) de son document maître (la liste de ressources).

3) Inutile de compter sur le batch ici car on n'a qu'un seul document. V. [sdx-developers] pour les refactorisations à envisager.

Pour le moment je reste sur l'idée qu'il est plus intéressant de n'avoir qu'un 
seul document et de le fragmenter pour l'indexer, que d'avoir plusieurs 
document à indexer......

Ca se discute mais, en l'état actuel des choses, ce que vous recevez n'est pas un document, mais une liste de documents dont l'indexation ne vous intéresse probablement pas.

Pour indexer les documents d'une collection j'envoie une requête http pour 
obtenir le liste des ressources, que j'indexe une par une ensuite avec le 
pipeline suivant :

        <sdx:uploadDocument urlParam="url" batch="2500" />

Mais je n'obtiens aucune amélioration .......snif

C'est logique : votre url retourne un et un seul document. Quel que soit votre batch, votre performance sera la même pour la simple et bonne raison que <sdx:uploadDocument> ne travaille pas en batch. A quoi bon d'ailleurs ?

A+

--
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden
+33 (0)2 99 29 67 78




reply via email to

[Prev in Thread] Current Thread [Next in Thread]