[Top][All Lists]
[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