sdx-users
[Top][All Lists]
Advanced

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

Re: [sdx-users] Indexation (et recherche) par champs


From: Pierrick Brihaye
Subject: Re: [sdx-users] Indexation (et recherche) par champs
Date: Mon, 13 Jan 2003 17:15:36 +0100
User-agent: Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.0.1) Gecko/20020823 Netscape/7.0

Bonjour,

address@hidden a écrit:

J'essaie de comprendre le fonctionnement de l'application exemple SDXWorld
et j'aurais bien aimé voir comment on pouvait faire une recherche pour une
balise XML donnée (balise <titre> des fiches XML fournies par exemple) dans
une base de documents XML.

Avant toute chose, il faut bien comprendre que, dans une base Lucene (seul type offert jusqu'à maintenant) on ne stocke pas le contenu du document XML d'origine, mais le contenu d'un *autre* document XML, celui qui résulte de la *transformation d'indexation* (v. par exemple sdxworld/conf/index-projet.xsl).

Ce document *doit* respecter le formalisme suivant :

<sdx:document id="xxx">
 <sdx:field code="aaa">contenu</sdx:field>
 <sdx:field code="bbb">contenu</sdx:field>
 <sdx:field code="ccc">contenu</sdx:field>
 ...
</sdx:document id="xxx">

En somme, on fait du SGBD :-) C'est néanmoins un peu plus compliqué dans la mesure où :

1) les champs peuvent être multivalués, c'est à dire que l'on peut définir plusieurs fois le même champ
2) les champs "word" sont tokénizés, c.a.d. que si l'on envoie :
<sdx:field name="champ_tokenizé">un mot et puis un autre</sdx:field>

Lucene va s'arranger pour stocker un truc de ce genre :
<sdx:field code="champ_tokenizé">un</sdx:field>
<sdx:field code="champ_tokenizé">mot</sdx:field>
<sdx:field code="champ_tokenizé">et</sdx:field>
<sdx:field code="champ_tokenizé">puis</sdx:field>
<sdx:field code="champ_tokenizé">un</sdx:field>
<sdx:field code="champ_tokenizé">autre</sdx:field>

En fait, c'est encore un peu plus compliqué car :
- dans l'exemple donné beaucoup de mots sont "vides" et ne seront donc pas indexés
- on a en plus un système qui permet de supprimer majuscules, accents...

L'objectif est donc d'obtenir un document d'indexation valide...

Apparemment, dans SDXWorld, la recherche se fait uniquement sur le champ
"sdxall"

Non, sdxworld contient plusieurs champs système (dont "sdxall") et trois champs "utilisateur" :
contenu, titre, url

Je vous propose de transformer, dans un processeur XSLT, un (ou plusieurs ;-) des documents de sdxworld dans la feuille d'indexation pour voir comment ça se passe.

Note : sdxall est un "hack" qui permet ntoamment d'effectuer des requêtes binaires (à deux arguments) là où car Lucene n'accepte pas, à cause de sa conception, les requêtes unaires. Si l'on veut les documents ou ne figurent *pas* telle valeur, on peut ainsi faire une recherche "simple" : sdxall:1 -champ:valeur. Accessoirement, ça permet de compter le nombre de documents dans une base : il suffit de compter le nombre de résultats sur la requête "sdxall:1".

Pour la recharche, on peut effectivement utiliser une FieldQuery en transmettant le champ et la valeur qu'on y recherche.

A bientôt,

--
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden





reply via email to

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